Mercurial > pidgin.yaz
changeset 25523:3439e98112ea
propagate from branch 'im.pidgin.pidgin' (head 39d4c6188e75b825060b407dfd9f478a9feef62b)
to branch 'im.pidgin.pidgin.yaz' (head bc6d9e5cbd96667fab34cc4c41f03a2f2559b024)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Fri, 29 Jun 2007 00:58:24 +0000 |
parents | 2d4df5ef0090 (diff) a880e1e93959 (current diff) |
children | b95ad3473623 |
files | |
diffstat | 10 files changed, 121 insertions(+), 62 deletions(-) [+] |
line wrap: on
line diff
--- a/finch/gntaccount.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntaccount.c Fri Jun 29 00:58:24 2007 +0000 @@ -645,8 +645,10 @@ GList *iter; GntWidget *box, *button; - if (accounts.window) + if (accounts.window) { + gnt_window_present(accounts.window); return; + } accounts.window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(accounts.window), TRUE);
--- a/finch/gntblist.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntblist.c Fri Jun 29 00:58:24 2007 +0000 @@ -2250,8 +2250,10 @@ { if (ggblist == NULL) new_list(list); - else if (ggblist->window) + else if (ggblist->window) { + gnt_window_present(ggblist->window); return; + } ggblist->window = gnt_vwindow_new(FALSE); gnt_widget_set_name(ggblist->window, "buddylist");
--- a/finch/gntdebug.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntdebug.c Fri Jun 29 00:58:24 2007 +0000 @@ -221,56 +221,59 @@ void finch_debug_window_show() { + GntWidget *wid, *box; + debug.paused = FALSE; - if (debug.window == NULL) - { - GntWidget *wid, *box; - debug.window = gnt_vbox_new(FALSE); - gnt_box_set_toplevel(GNT_BOX(debug.window), TRUE); - gnt_box_set_title(GNT_BOX(debug.window), _("Debug Window")); - gnt_box_set_pad(GNT_BOX(debug.window), 0); - gnt_box_set_alignment(GNT_BOX(debug.window), GNT_ALIGN_MID); + if (debug.window) { + gnt_window_present(debug.window); + return; + } - debug.tview = gnt_text_view_new(); - gnt_box_add_widget(GNT_BOX(debug.window), debug.tview); - gnt_widget_set_size(debug.tview, - purple_prefs_get_int(PREF_ROOT "/size/width"), - purple_prefs_get_int(PREF_ROOT "/size/height")); - g_signal_connect(G_OBJECT(debug.tview), "size_changed", G_CALLBACK(size_changed_cb), NULL); + debug.window = gnt_vbox_new(FALSE); + gnt_box_set_toplevel(GNT_BOX(debug.window), TRUE); + gnt_box_set_title(GNT_BOX(debug.window), _("Debug Window")); + gnt_box_set_pad(GNT_BOX(debug.window), 0); + gnt_box_set_alignment(GNT_BOX(debug.window), GNT_ALIGN_MID); - gnt_box_add_widget(GNT_BOX(debug.window), gnt_line_new(FALSE)); + debug.tview = gnt_text_view_new(); + gnt_box_add_widget(GNT_BOX(debug.window), debug.tview); + gnt_widget_set_size(debug.tview, + purple_prefs_get_int(PREF_ROOT "/size/width"), + purple_prefs_get_int(PREF_ROOT "/size/height")); + g_signal_connect(G_OBJECT(debug.tview), "size_changed", G_CALLBACK(size_changed_cb), NULL); - box = gnt_hbox_new(FALSE); - gnt_box_set_alignment(GNT_BOX(box), GNT_ALIGN_MID); - gnt_box_set_fill(GNT_BOX(box), FALSE); + gnt_box_add_widget(GNT_BOX(debug.window), gnt_line_new(FALSE)); + + box = gnt_hbox_new(FALSE); + gnt_box_set_alignment(GNT_BOX(box), GNT_ALIGN_MID); + gnt_box_set_fill(GNT_BOX(box), FALSE); - /* XXX: Setting the GROW_Y for the following widgets don't make sense. But right now - * it's necessary to make the width of the debug window resizable ... like I said, - * it doesn't make sense. The bug is likely in the packing in gntbox.c. - */ - wid = gnt_button_new(_("Clear")); - g_signal_connect(G_OBJECT(wid), "activate", G_CALLBACK(clear_debug_win), debug.tview); - GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); - gnt_box_add_widget(GNT_BOX(box), wid); - - debug.search = gnt_entry_new(purple_prefs_get_string(PREF_ROOT "/filter")); - gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Filter: "))); - gnt_box_add_widget(GNT_BOX(box), debug.search); - g_signal_connect(G_OBJECT(debug.search), "text_changed", G_CALLBACK(update_filter_string), NULL); + /* XXX: Setting the GROW_Y for the following widgets don't make sense. But right now + * it's necessary to make the width of the debug window resizable ... like I said, + * it doesn't make sense. The bug is likely in the packing in gntbox.c. + */ + wid = gnt_button_new(_("Clear")); + g_signal_connect(G_OBJECT(wid), "activate", G_CALLBACK(clear_debug_win), debug.tview); + GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); + gnt_box_add_widget(GNT_BOX(box), wid); - wid = gnt_check_box_new(_("Pause")); - g_signal_connect(G_OBJECT(wid), "toggled", G_CALLBACK(toggle_pause), NULL); - GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); - gnt_box_add_widget(GNT_BOX(box), wid); + debug.search = gnt_entry_new(purple_prefs_get_string(PREF_ROOT "/filter")); + gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Filter: "))); + gnt_box_add_widget(GNT_BOX(box), debug.search); + g_signal_connect(G_OBJECT(debug.search), "text_changed", G_CALLBACK(update_filter_string), NULL); - gnt_box_add_widget(GNT_BOX(debug.window), box); - GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_GROW_Y); + wid = gnt_check_box_new(_("Pause")); + g_signal_connect(G_OBJECT(wid), "toggled", G_CALLBACK(toggle_pause), NULL); + GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); + gnt_box_add_widget(GNT_BOX(box), wid); - gnt_widget_set_name(debug.window, "debug-window"); + gnt_box_add_widget(GNT_BOX(debug.window), box); + GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_GROW_Y); - g_signal_connect(G_OBJECT(debug.window), "destroy", G_CALLBACK(reset_debug_win), NULL); - gnt_text_view_attach_scroll_widget(GNT_TEXT_VIEW(debug.tview), debug.window); - } + gnt_widget_set_name(debug.window, "debug-window"); + + g_signal_connect(G_OBJECT(debug.window), "destroy", G_CALLBACK(reset_debug_win), NULL); + gnt_text_view_attach_scroll_widget(GNT_TEXT_VIEW(debug.tview), debug.window); gnt_widget_show(debug.window); }
--- a/finch/gntft.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntft.c Fri Jun 29 00:58:24 2007 +0000 @@ -262,6 +262,8 @@ { if (xfer_dialog == NULL) finch_xfer_dialog_new(); + else + gnt_window_present(xfer_dialog->window); } void
--- a/finch/gntplugin.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntplugin.c Fri Jun 29 00:58:24 2007 +0000 @@ -242,8 +242,10 @@ GList *iter; GList *seen; - if (plugins.window) + if (plugins.window) { + gnt_window_present(plugins.window); return; + } purple_plugins_probe(G_MODULE_SUFFIX);
--- a/finch/gntpounce.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntpounce.c Fri Jun 29 00:58:24 2007 +0000 @@ -672,6 +672,7 @@ GntWidget *win; if (pounces_manager != NULL) { + gnt_window_present(pounces_manager->window); return; }
--- a/finch/gntprefs.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntprefs.c Fri Jun 29 00:58:24 2007 +0000 @@ -30,9 +30,16 @@ #include "gntprefs.h" #include "gntrequest.h" +#include "gnt.h" +#include "gntwidget.h" + #include <string.h> -static GList *freestrings; /* strings to be freed when the pref-window is closed */ +static struct { + GList *freestrings; /* strings to be freed when the pref-window is closed */ + gboolean showing; + GntWidget *window; +} pref_request; void finch_prefs_init() { @@ -98,7 +105,7 @@ str = g_strdup_printf("%ld", purple_savedstatus_get_creation_time(iter->data)); list = g_list_append(list, (char*)purple_savedstatus_get_title(iter->data)); list = g_list_append(list, str); - freestrings = g_list_prepend(freestrings, str); + pref_request.freestrings = g_list_prepend(pref_request.freestrings, str); } return list; } @@ -190,22 +197,22 @@ {PURPLE_PREF_NONE, NULL, NULL, NULL}, }; -/* XXX: Translate after the freeze */ static Prefs idle[] = { - {PURPLE_PREF_STRING, "/purple/away/idle_reporting", "Report Idle time", get_idle_options}, - {PURPLE_PREF_BOOLEAN, "/purple/away/away_when_idle", "Change status when idle", NULL}, - {PURPLE_PREF_INT, "/purple/away/mins_before_away", "Minutes before changing status", NULL}, - {PURPLE_PREF_INT, "/purple/savedstatus/idleaway", "Change status to", get_status_titles}, + {PURPLE_PREF_STRING, "/purple/away/idle_reporting", N_("Report Idle time"), get_idle_options}, + {PURPLE_PREF_BOOLEAN, "/purple/away/away_when_idle", N_("Change status when idle"), NULL}, + {PURPLE_PREF_INT, "/purple/away/mins_before_away", N_("Minutes before changing status"), NULL}, + {PURPLE_PREF_INT, "/purple/savedstatus/idleaway", N_("Change status to"), get_status_titles}, {PURPLE_PREF_NONE, NULL, NULL, NULL}, }; static void free_strings() { - g_list_foreach(freestrings, (GFunc)g_free, NULL); - g_list_free(freestrings); - freestrings = NULL; + g_list_foreach(pref_request.freestrings, (GFunc)g_free, NULL); + g_list_free(pref_request.freestrings); + pref_request.freestrings = NULL; + pref_request.showing = FALSE; } static void @@ -236,6 +243,11 @@ { PurpleRequestFields *fields; + if (pref_request.showing) { + gnt_window_present(pref_request.window); + return; + } + fields = purple_request_fields_new(); add_pref_group(fields, _("Buddy List"), blist); @@ -243,7 +255,8 @@ add_pref_group(fields, _("Logging"), logging); add_pref_group(fields, _("Idle"), idle); - purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields, + pref_request.showing = TRUE; + pref_request.window = purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields, _("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings, NULL, NULL, NULL, NULL);
--- a/finch/gntrequest.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntrequest.c Fri Jun 29 00:58:24 2007 +0000 @@ -67,8 +67,32 @@ return window; } +/** + * If the window is closed by the wm (ie, without triggering any of + * the buttons, then do some default callback. + */ +static void +setup_default_callback(GntWidget *window, gpointer default_cb, gpointer data) +{ + g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(default_cb), data); +} + +static void +action_performed(GntWidget *button, gpointer data) +{ + g_signal_handlers_disconnect_matched(data, G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, setup_default_callback, NULL); +} + +/** + * window: this is the window + * userdata: the userdata to pass to the primary callbacks + * cb: the callback + * data: data for the callback + * (text, primary-callback) pairs, ended by a NULL + */ static GntWidget * -setup_button_box(gpointer userdata, gpointer cb, gpointer data, ...) +setup_button_box(GntWidget *win, gpointer userdata, gpointer cb, gpointer data, ...) { GntWidget *box, *button; va_list list; @@ -87,6 +111,7 @@ g_object_set_data(G_OBJECT(button), "activate-callback", callback); g_object_set_data(G_OBJECT(button), "activate-userdata", userdata); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(cb), data); + g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(action_performed), win); } va_end(list); @@ -127,10 +152,11 @@ gnt_entry_set_masked(GNT_ENTRY(entry), TRUE); gnt_box_add_widget(GNT_BOX(window), entry); - box = setup_button_box(user_data, notify_input_cb, entry, + box = setup_button_box(window, user_data, notify_input_cb, entry, ok_text, ok_cb, cancel_text, cancel_cb, NULL); gnt_box_add_widget(GNT_BOX(window), box); + setup_default_callback(window, cancel_cb, user_data); gnt_widget_show(window); return window; @@ -189,10 +215,11 @@ } gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), GINT_TO_POINTER(default_value + 1)); - box = setup_button_box(user_data, request_choice_cb, combo, + box = setup_button_box(window, user_data, request_choice_cb, combo, ok_text, ok_cb, cancel_text, cancel_cb, NULL); gnt_box_add_widget(GNT_BOX(window), box); + setup_default_callback(window, cancel_cb, user_data); gnt_widget_show(window); return window; @@ -538,10 +565,11 @@ } gnt_box_add_widget(GNT_BOX(window), box); - box = setup_button_box(userdata, request_fields_cb, allfields, + box = setup_button_box(window, userdata, request_fields_cb, allfields, ok, ok_cb, cancel, cancel_cb, NULL); gnt_box_add_widget(GNT_BOX(window), box); + setup_default_callback(window, cancel_cb, userdata); gnt_widget_show(window); g_object_set_data(G_OBJECT(window), "fields", allfields);
--- a/finch/gntstatus.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/gntstatus.c Fri Jun 29 00:58:24 2007 +0000 @@ -163,8 +163,10 @@ void finch_savedstatus_show_all() { GntWidget *window, *tree, *box, *button; - if (statuses.window) + if (statuses.window) { + gnt_window_present(statuses.window); return; + } statuses.window = window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(window), TRUE);
--- a/finch/libgnt/gntmain.c Thu Jun 28 15:21:13 2007 +0000 +++ b/finch/libgnt/gntmain.c Fri Jun 29 00:58:24 2007 +0000 @@ -488,8 +488,12 @@ * Stuff for 'window management' * *********************************/ -void gnt_window_present(GntWidget *window) { - gnt_wm_raise_window(wm, window); +void gnt_window_present(GntWidget *window) +{ + if (wm->event_stack) + gnt_wm_raise_window(wm, window); + else + gnt_widget_set_urgent(window); } void gnt_screen_occupy(GntWidget *widget)