diff options
Diffstat (limited to 'src/fe-gtk')
-rw-r--r-- | src/fe-gtk/dccgui.c | 74 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.c | 14 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.vcxproj | 2 | ||||
-rw-r--r-- | src/fe-gtk/fkeys.c | 32 | ||||
-rw-r--r-- | src/fe-gtk/joind.c | 8 | ||||
-rw-r--r-- | src/fe-gtk/menu.c | 2 |
6 files changed, 114 insertions, 18 deletions
diff --git a/src/fe-gtk/dccgui.c b/src/fe-gtk/dccgui.c index 24d3bcbf..a3c2619a 100644 --- a/src/fe-gtk/dccgui.c +++ b/src/fe-gtk/dccgui.c @@ -78,6 +78,7 @@ struct dccwindow GtkWidget *accept_button; GtkWidget *resume_button; GtkWidget *open_button; + GtkWidget *clear_button; /* clears aborted and completed requests */ GtkWidget *file_label; GtkWidget *address_label; @@ -380,6 +381,50 @@ dcc_append (struct DCC *dcc, GtkListStore *store, gboolean prepend) dcc_prepare_row_send (dcc, store, &iter, FALSE); } +/* Returns aborted and completed transfers. */ +static GSList * +dcc_get_completed (void) +{ + struct DCC *dcc; + GtkTreeIter iter; + GtkTreeModel *model; + GSList *completed = NULL; + + model = GTK_TREE_MODEL (dccfwin.store); + if (gtk_tree_model_get_iter_first (model, &iter)) + { + do + { + gtk_tree_model_get (model, &iter, COL_DCC, &dcc, -1); + if (is_dcc_completed (dcc)) + completed = g_slist_prepend (completed, dcc); + + } while (gtk_tree_model_iter_next (model, &iter)); + } + + return completed; +} + +static gboolean +dcc_completed_transfer_exists (void) +{ + gboolean exist; + GSList *comp_list; + + comp_list = dcc_get_completed (); + exist = comp_list != NULL; + + g_slist_free (comp_list); + return exist; +} + +static void +update_clear_button_sensitivity (void) +{ + gboolean sensitive = dcc_completed_transfer_exists (); + gtk_widget_set_sensitive (dccfwin.clear_button, sensitive); +} + static void dcc_fill_window (int flags) { @@ -426,6 +471,8 @@ dcc_fill_window (int flags) gtk_tree_model_get_iter_first (GTK_TREE_MODEL (dccfwin.store), &iter); gtk_tree_selection_select_iter (dccfwin.sel, &iter); } + + update_clear_button_sensitivity (); } /* return list of selected DCCs */ @@ -511,6 +558,9 @@ abort_clicked (GtkWidget * wid, gpointer none) dcc_abort (dcc->serv->front_session, dcc); } g_slist_free (start); + + /* Enable the clear button if it wasn't already enabled */ + update_clear_button_sensitivity (); } static void @@ -530,6 +580,27 @@ accept_clicked (GtkWidget * wid, gpointer none) } static void +clear_completed (GtkWidget * wid, gpointer none) +{ + struct DCC *dcc; + GSList *completed; + + /* Make a new list of only the completed items and abort each item. + * A new list is made because calling dcc_abort removes items from the original list, + * making it impossible to iterate over that list directly. + */ + for (completed = dcc_get_completed (); completed; completed = completed->next) + { + dcc = completed->data; + dcc_abort (dcc->serv->front_session, dcc); + } + + /* The data was freed by dcc_close */ + g_slist_free (completed); + update_clear_button_sensitivity (); +} + +static void browse_folder (char *dir) { #ifdef WIN32 @@ -812,6 +883,7 @@ fe_dcc_open_recv_win (int passive) dccfwin.abort_button = gtkutil_button (bbox, GTK_STOCK_CANCEL, 0, abort_clicked, 0, _("Abort")); dccfwin.accept_button = gtkutil_button (bbox, GTK_STOCK_APPLY, 0, accept_clicked, 0, _("Accept")); dccfwin.resume_button = gtkutil_button (bbox, GTK_STOCK_REFRESH, 0, resume_clicked, 0, _("Resume")); + dccfwin.clear_button = gtkutil_button (bbox, GTK_STOCK_CLEAR, 0, clear_completed, 0, _("Clear")); dccfwin.open_button = gtkutil_button (bbox, 0, 0, browse_dcc_folder, 0, _("Open Folder...")); gtk_widget_set_sensitive (dccfwin.accept_button, FALSE); gtk_widget_set_sensitive (dccfwin.resume_button, FALSE); @@ -1055,6 +1127,8 @@ fe_dcc_update (struct DCC *dcc) default: dcc_update_chat (dcc); } + + update_clear_button_sensitivity (); } void diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c index c8a80369..acba80a5 100644 --- a/src/fe-gtk/fe-gtk.c +++ b/src/fe-gtk/fe-gtk.c @@ -220,26 +220,26 @@ fe_args (int argc, char *argv[]) if (arg_show_version) { + buffer = g_strdup_printf ("%s %s", PACKAGE_NAME, PACKAGE_VERSION); #ifdef WIN32 - buffer = g_strdup_printf (DISPLAY_NAME " " PACKAGE_VERSION "\n"); gtk_init (&argc, &argv); create_msg_dialog ("Version Information", buffer); - g_free (buffer); #else - printf (PACKAGE_NAME" "PACKAGE_VERSION"\n"); + puts (buffer); #endif + g_free (buffer); return 0; } if (arg_show_autoload) { - buffer = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "addons\n", get_xdir ()); + buffer = g_strdup_printf ("%s%caddons%c", get_xdir(), G_DIR_SEPARATOR, G_DIR_SEPARATOR); #ifdef WIN32 gtk_init (&argc, &argv); create_msg_dialog ("Plugin/Script Auto-load Directory", buffer); #else - printf (buffer); + puts (buffer); #endif g_free (buffer); @@ -248,12 +248,12 @@ fe_args (int argc, char *argv[]) if (arg_show_config) { - buffer = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "\n", get_xdir ()); + buffer = g_strdup_printf ("%s%c", get_xdir(), G_DIR_SEPARATOR); #ifdef WIN32 gtk_init (&argc, &argv); create_msg_dialog ("User Config Directory", buffer); #else - printf (buffer); + puts (buffer); #endif g_free (buffer); diff --git a/src/fe-gtk/fe-gtk.vcxproj b/src/fe-gtk/fe-gtk.vcxproj index 0c149928..f8c6377a 100644 --- a/src/fe-gtk/fe-gtk.vcxproj +++ b/src/fe-gtk/fe-gtk.vcxproj @@ -59,7 +59,6 @@ <ClCompile> <PrecompiledHeader> </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -81,7 +80,6 @@ <ClCompile> <PrecompiledHeader> </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions> diff --git a/src/fe-gtk/fkeys.c b/src/fe-gtk/fkeys.c index 8a9a13c2..ba9599e1 100644 --- a/src/fe-gtk/fkeys.c +++ b/src/fe-gtk/fkeys.c @@ -148,7 +148,7 @@ static const struct key_action key_actions[KEY_MAX_ACTIONS + 1] = { {key_action_insert, "Insert in Buffer", N_("The \002Insert in Buffer\002 command will insert the contents of Data 1 into the entry where the key sequence was pressed at the current cursor position")}, {key_action_scroll_page, "Scroll Page", - N_("The \002Scroll Page\002 command scrolls the text widget up or down one page or one line. Set Data 1 to either Up, Down, +1 or -1.")}, + N_("The \002Scroll Page\002 command scrolls the text widget up or down one page or one line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1.")}, {key_action_set_buffer, "Set Buffer", N_("The \002Set Buffer\002 command sets the entry where the key sequence was entered to the contents of Data 1")}, {key_action_history_up, "Last Command", @@ -395,6 +395,8 @@ key_load_defaults () "S\nNext\nChange Selected Nick\nD1!\nD2!\n\n"\ "S\nPrior\nChange Selected Nick\nD1:Up\nD2!\n\n"\ "None\nNext\nScroll Page\nD1:Down\nD2!\n\n"\ + "C\nHome\nScroll Page\nD1:Top\nD2!\n\n"\ + "C\nEnd\nScroll Page\nD1:Bottom\nD2!\n\n"\ "None\nPrior\nScroll Page\nD1:Up\nD2!\n\n"\ "S\nDown\nScroll Page\nD1:+1\nD2!\n\n"\ "S\nUp\nScroll Page\nD1:-1\nD2!\n\n"\ @@ -1279,13 +1281,19 @@ key_action_scroll_page (GtkWidget * wid, GdkEventKey * evt, char *d1, { int value, end; GtkAdjustment *adj; - enum scroll_type { PAGE_UP, PAGE_DOWN, LINE_UP, LINE_DOWN }; + enum scroll_type { PAGE_TOP, PAGE_BOTTOM, PAGE_UP, PAGE_DOWN, LINE_UP, LINE_DOWN }; int type = PAGE_DOWN; if (d1) { - if (!g_ascii_strcasecmp (d1, "up")) + if (!g_ascii_strcasecmp (d1, "top")) + type = PAGE_TOP; + else if (!g_ascii_strcasecmp (d1, "bottom")) + type = PAGE_BOTTOM; + else if (!g_ascii_strcasecmp (d1, "up")) type = PAGE_UP; + else if (!g_ascii_strcasecmp (d1, "down")) + type = PAGE_DOWN; else if (!g_ascii_strcasecmp (d1, "+1")) type = LINE_DOWN; else if (!g_ascii_strcasecmp (d1, "-1")) @@ -1300,21 +1308,29 @@ key_action_scroll_page (GtkWidget * wid, GdkEventKey * evt, char *d1, switch (type) { - case LINE_UP: - value = adj->value - 1.0; + case PAGE_TOP: + value = 0; break; - case LINE_DOWN: - value = adj->value + 1.0; + case PAGE_BOTTOM: + value = end; break; case PAGE_UP: value = adj->value - (adj->page_size - 1); break; - default: /* PAGE_DOWN */ + case PAGE_DOWN: value = adj->value + (adj->page_size - 1); break; + + case LINE_UP: + value = adj->value - 1.0; + break; + + case LINE_DOWN: + value = adj->value + 1.0; + break; } if (value < 0) diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c index b58d662a..55d62e3b 100644 --- a/src/fe-gtk/joind.c +++ b/src/fe-gtk/joind.c @@ -34,6 +34,7 @@ #include "../common/hexchat.h" #include "../common/hexchatc.h" #include "../common/server.h" +#include "../common/servlist.h" #include "../common/fe.h" #include "fe-gtk.h" #include "chanlist.h" @@ -241,6 +242,13 @@ joind_show_dialog (server *serv) G_CALLBACK (joind_radio2_cb), serv); g_signal_connect (G_OBJECT (okbutton1), "clicked", G_CALLBACK (joind_ok_cb), serv); + + if (serv->network) + if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "freenode") == 0) + { + gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE); + } gtk_widget_grab_focus (okbutton1); gtk_widget_show_all (dialog1); diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index 1948348a..58c28e51 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -1545,7 +1545,7 @@ menu_ctcpguiopen (void) static void menu_docs (GtkWidget *wid, gpointer none) { - fe_open_url ("http://docs.hexchat.org/"); + fe_open_url ("http://hexchat.readthedocs.org"); } /*static void |