Add extension filter for file dialogs, specify filters and starting folder for loading plugins
This commit is contained in:
parent
2b3e1f46e3
commit
bc651b0222
|
@ -107,10 +107,11 @@ void fe_get_str (char *prompt, char *def, void *callback, void *ud);
|
|||
void fe_get_int (char *prompt, int def, void *callback, void *ud);
|
||||
#define FRF_WRITE 1 /* save file */
|
||||
#define FRF_MULTIPLE 2 /* multi-select */
|
||||
#define FRF_ADDFOLDER 4 /* add ~/.xchat2 to favourites */
|
||||
#define FRF_ADDFOLDER 4 /* add ~/.config/hexchat to favourites */
|
||||
#define FRF_CHOOSEFOLDER 8 /* choosing a folder only */
|
||||
#define FRF_FILTERISINITIAL 16 /* unused */
|
||||
#define FRF_FILTERISINITIAL 16 /* filter is initial directory */
|
||||
#define FRF_NOASKOVERWRITE 32 /* don't ask to overwrite existing files */
|
||||
#define FRF_EXTENSIONS 64 /* specify file extensions to be displayed */
|
||||
void fe_get_file (const char *title, char *initial,
|
||||
void (*callback) (void *userdata, char *file), void *userdata,
|
||||
int flags);
|
||||
|
|
|
@ -530,7 +530,7 @@ chanlist_save (GtkWidget * wid, server *serv)
|
|||
|
||||
if (gtk_tree_model_get_iter_first (model, &iter))
|
||||
gtkutil_file_req (_("Select an output filename"), chanlist_filereq_done,
|
||||
serv, NULL, FRF_WRITE);
|
||||
serv, NULL, NULL, FRF_WRITE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
@ -165,7 +165,7 @@ fe_dcc_send_filereq (struct session *sess, char *nick, int maxcps, int passive)
|
|||
mdc->passive = passive;
|
||||
|
||||
snprintf (tbuf, sizeof tbuf, _("Send file to %s"), nick);
|
||||
gtkutil_file_req (tbuf, dcc_send_filereq_file, mdc, NULL, FRF_MULTIPLE);
|
||||
gtkutil_file_req (tbuf, dcc_send_filereq_file, mdc, NULL, NULL, FRF_MULTIPLE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -893,7 +893,7 @@ fe_confirm (const char *message, void (*yesproc)(void *), void (*noproc)(void *)
|
|||
struct DCC *dcc = ud;
|
||||
|
||||
if (dcc->file)
|
||||
gtkutil_file_req (message, dcc_saveas_cb, ud, dcc->file,
|
||||
gtkutil_file_req (message, dcc_saveas_cb, ud, dcc->file, NULL,
|
||||
FRF_WRITE|FRF_FILTERISINITIAL|FRF_NOASKOVERWRITE);
|
||||
}
|
||||
|
||||
|
@ -1144,5 +1144,5 @@ fe_get_file (const char *title, char *initial,
|
|||
{
|
||||
/* OK: Call callback once per file, then once more with file=NULL. */
|
||||
/* CANCEL: Call callback once with file=NULL. */
|
||||
gtkutil_file_req (title, callback, userdata, initial, flags | FRF_FILTERISINITIAL);
|
||||
gtkutil_file_req (title, callback, userdata, initial, NULL, flags | FRF_FILTERISINITIAL);
|
||||
}
|
||||
|
|
|
@ -370,12 +370,15 @@ win32_read_thread (GIOChannel *source, GIOCondition cond, struct file_req *freq)
|
|||
#endif /* native file dialogs */
|
||||
|
||||
void
|
||||
gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter,
|
||||
gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, char *extensions,
|
||||
int flags)
|
||||
{
|
||||
struct file_req *freq;
|
||||
GtkWidget *dialog;
|
||||
GtkFileFilter *filefilter;
|
||||
extern char *get_xdir_fs (void);
|
||||
char *token;
|
||||
char *tokenbuffer;
|
||||
|
||||
#if 0 /* native file dialogs */
|
||||
#ifdef WIN32
|
||||
|
@ -473,6 +476,23 @@ gtkutil_file_req (const char *title, void *callback, void *userdata, char *filte
|
|||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), filter);
|
||||
}
|
||||
|
||||
if (flags & FRF_EXTENSIONS && extensions != NULL)
|
||||
{
|
||||
filefilter = gtk_file_filter_new ();
|
||||
tokenbuffer = g_strdup (extensions);
|
||||
token = strtok (tokenbuffer, ";");
|
||||
|
||||
while (token != NULL)
|
||||
{
|
||||
gtk_file_filter_add_pattern (filefilter, token);
|
||||
token = strtok (NULL, ";");
|
||||
}
|
||||
|
||||
g_free (tokenbuffer);
|
||||
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filefilter);
|
||||
g_free (filefilter);
|
||||
}
|
||||
|
||||
freq = malloc (sizeof (struct file_req));
|
||||
freq->dialog = dialog;
|
||||
freq->flags = flags;
|
||||
|
|
|
@ -10,7 +10,7 @@ typedef void (*filereqcallback) (void *, char *file);
|
|||
#define FRF_FILTERISINITIAL 16
|
||||
#define FRF_NOASKOVERWRITE 32
|
||||
|
||||
void gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, int flags);
|
||||
void gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, char *extensions, int flags);
|
||||
void gtkutil_destroy (GtkWidget * igad, GtkWidget * dgad);
|
||||
GtkWidget *gtkutil_button (GtkWidget *box, char *stock, char *tip, void *callback,
|
||||
void *userdata, char *labeltext);
|
||||
|
|
|
@ -1288,7 +1288,7 @@ static void
|
|||
menu_savebuffer (GtkWidget * wid, gpointer none)
|
||||
{
|
||||
gtkutil_file_req (_("Select an output filename"), savebuffer_req_done,
|
||||
current_sess, NULL, FRF_WRITE);
|
||||
current_sess, NULL, NULL, FRF_WRITE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -41,6 +41,7 @@ typedef struct session xchat_context;
|
|||
#include "../common/outbound.h"
|
||||
#include "../common/fe.h"
|
||||
#include "../common/xchatc.h"
|
||||
#include "../common/cfgfiles.h"
|
||||
#include "gtkutil.h"
|
||||
|
||||
/* model for the plugin treeview */
|
||||
|
@ -154,7 +155,11 @@ plugingui_load (void)
|
|||
#else
|
||||
#endif
|
||||
#endif /* native file dialogs */
|
||||
NULL, FRF_ADDFOLDER);
|
||||
#ifdef WIN32
|
||||
get_xdir_utf8 (), "*.dll;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
|
||||
#else
|
||||
get_xdir_utf8 (), "*.so;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -81,7 +81,7 @@ rawlog_clearbutton (GtkWidget * wid, server *serv)
|
|||
static int
|
||||
rawlog_savebutton (GtkWidget * wid, server *serv)
|
||||
{
|
||||
gtkutil_file_req (_("Save As..."), rawlog_save, serv, NULL, FRF_WRITE);
|
||||
gtkutil_file_req (_("Save As..."), rawlog_save, serv, NULL, NULL, FRF_WRITE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -955,7 +955,7 @@ setup_filereq_cb (GtkWidget *entry, char *file)
|
|||
static void
|
||||
setup_browsefile_cb (GtkWidget *button, GtkWidget *entry)
|
||||
{
|
||||
gtkutil_file_req (_("Select an Image File"), setup_filereq_cb, entry, NULL, 0);
|
||||
gtkutil_file_req (_("Select an Image File"), setup_filereq_cb, entry, NULL, NULL, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -990,7 +990,7 @@ setup_fontsel_cancel (GtkWidget *button, GtkFontSelectionDialog *dialog)
|
|||
static void
|
||||
setup_browsefolder_cb (GtkWidget *button, GtkEntry *entry)
|
||||
{
|
||||
gtkutil_file_req (_("Select Download Folder"), setup_filereq_cb, entry, entry->text, FRF_CHOOSEFOLDER);
|
||||
gtkutil_file_req (_("Select Download Folder"), setup_filereq_cb, entry, entry->text, NULL, FRF_CHOOSEFOLDER);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1552,7 +1552,7 @@ setup_snd_filereq_cb (GtkWidget *entry, char *file)
|
|||
static void
|
||||
setup_snd_browse_cb (GtkWidget *button, GtkEntry *entry)
|
||||
{
|
||||
gtkutil_file_req (_("Select a sound file"), setup_snd_filereq_cb, entry, NULL, 0);
|
||||
gtkutil_file_req (_("Select a sound file"), setup_snd_filereq_cb, entry, NULL, NULL, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -302,7 +302,7 @@ pevent_save_cb (GtkWidget * wid, void *data)
|
|||
if (data)
|
||||
{
|
||||
gtkutil_file_req (_("Print Texts File"), pevent_save_req_cb, NULL,
|
||||
NULL, FRF_WRITE);
|
||||
NULL, NULL, FRF_WRITE);
|
||||
return;
|
||||
}
|
||||
pevent_save (NULL);
|
||||
|
@ -324,7 +324,7 @@ pevent_load_req_cb (void *arg1, char *file)
|
|||
static void
|
||||
pevent_load_cb (GtkWidget * wid, void *data)
|
||||
{
|
||||
gtkutil_file_req (_("Print Texts File"), pevent_load_req_cb, NULL, NULL, 0);
|
||||
gtkutil_file_req (_("Print Texts File"), pevent_load_req_cb, NULL, NULL, NULL, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -145,7 +145,7 @@ static void
|
|||
url_button_save (void)
|
||||
{
|
||||
gtkutil_file_req (_("Select an output filename"),
|
||||
url_save_callback, NULL, NULL, FRF_WRITE);
|
||||
url_save_callback, NULL, NULL, NULL, FRF_WRITE);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue