summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Nelson <wabz@pidgin.im>2007-05-12 23:58:11 +0000
committerRichard Nelson <wabz@pidgin.im>2007-05-12 23:58:11 +0000
commit021ca1725d21d2d93803157ca36dfaf13cfc9fc1 (patch)
tree38028c52436fdc60caca29ee90cf5a868f509574
parentfb5831344477101954113330f5fd01db6a7cd6db (diff)
downloadpidgin-021ca1725d21d2d93803157ca36dfaf13cfc9fc1.tar.gz
Let windows know when the workspace they are in is being hidden/shown
-rw-r--r--finch/gntblist.c2
-rw-r--r--finch/libgnt/gntmenu.c5
-rw-r--r--finch/libgnt/gnttree.c2
-rw-r--r--finch/libgnt/gntwindow.c38
-rw-r--r--finch/libgnt/gntwindow.h3
-rw-r--r--finch/libgnt/gntws.c7
6 files changed, 52 insertions, 5 deletions
diff --git a/finch/gntblist.c b/finch/gntblist.c
index 10b99de004..e547aa5fb3 100644
--- a/finch/gntblist.c
+++ b/finch/gntblist.c
@@ -2274,6 +2274,8 @@ blist_show(PurpleBuddyList *list)
ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED);
g_signal_connect_data(G_OBJECT(ggblist->tree), "lost-focus", G_CALLBACK(remove_peripherals),
ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED);
+ g_signal_connect_data(G_OBJECT(ggblist->window), "workspace-hidden", G_CALLBACK(remove_peripherals),
+ ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED);
g_signal_connect(G_OBJECT(ggblist->tree), "size_changed", G_CALLBACK(size_changed_cb), NULL);
g_signal_connect(G_OBJECT(ggblist->window), "position_set", G_CALLBACK(save_position_cb), NULL);
g_signal_connect(G_OBJECT(ggblist->window), "destroy", G_CALLBACK(reset_blist_window), NULL);
diff --git a/finch/libgnt/gntmenu.c b/finch/libgnt/gntmenu.c
index d418555b84..9c1e73cfa9 100644
--- a/finch/libgnt/gntmenu.c
+++ b/finch/libgnt/gntmenu.c
@@ -220,7 +220,10 @@ gnt_menu_activate(GntWidget *widget)
static void
gnt_menu_hide(GntWidget *widget)
{
- GntMenu *menu = GNT_MENU(widget);
+ GntMenu *sub, *menu = GNT_MENU(widget);
+
+ while ((sub = menu->submenu))
+ gnt_widget_hide(GNT_WIDGET(sub));
if (menu->parentmenu)
menu->parentmenu->submenu = NULL;
}
diff --git a/finch/libgnt/gnttree.c b/finch/libgnt/gnttree.c
index 3e8dfdefe1..a375d41a10 100644
--- a/finch/libgnt/gnttree.c
+++ b/finch/libgnt/gnttree.c
@@ -281,7 +281,7 @@ update_row_text(GntTree *tree, GntTreeRow *row)
notfirst = TRUE;
- if (len > width) {
+ if (len > width - 2) {
len = width - 1;
cut = TRUE;
}
diff --git a/finch/libgnt/gntwindow.c b/finch/libgnt/gntwindow.c
index e879b98373..981ba82dc0 100644
--- a/finch/libgnt/gntwindow.c
+++ b/finch/libgnt/gntwindow.c
@@ -5,9 +5,13 @@
enum
{
- SIGS = 1,
+ SIG_WORKSPACE_HIDE,
+ SIG_WORKSPACE_SHOW,
+ SIGS,
};
+static guint signals[SIGS] = { 0 };
+
static GntBoxClass *parent_class = NULL;
static void (*org_destroy)(GntWidget *widget);
@@ -42,6 +46,24 @@ gnt_window_class_init(GntWindowClass *klass)
org_destroy = wid_class->destroy;
wid_class->destroy = gnt_window_destroy;
+ signals[SIG_WORKSPACE_HIDE] =
+ g_signal_new("workspace-hidden",
+ G_TYPE_FROM_CLASS(klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[SIG_WORKSPACE_SHOW] =
+ g_signal_new("workspace-shown",
+ G_TYPE_FROM_CLASS(klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
gnt_bindable_class_register_action(bindable, "show-menu", show_menu,
GNT_KEY_CTRL_O, NULL);
gnt_bindable_register_binding(bindable, "show-menu", GNT_KEY_F10, NULL);
@@ -109,6 +131,20 @@ GntWidget *gnt_window_box_new(gboolean homo, gboolean vert)
return wid;
}
+void
+gnt_window_workspace_hiding(GntWindow *window)
+{
+ if (window->menu)
+ gnt_widget_hide(GNT_WIDGET(window->menu));
+ g_signal_emit(window, signals[SIG_WORKSPACE_HIDE], 0);
+}
+
+void
+gnt_window_workspace_showing(GntWindow *window)
+{
+ g_signal_emit(window, signals[SIG_WORKSPACE_SHOW], 0);
+}
+
void gnt_window_set_menu(GntWindow *window, GntMenu *menu)
{
/* If a menu already existed, then destroy that first. */
diff --git a/finch/libgnt/gntwindow.h b/finch/libgnt/gntwindow.h
index fe39bb3c69..970c174178 100644
--- a/finch/libgnt/gntwindow.h
+++ b/finch/libgnt/gntwindow.h
@@ -51,6 +51,9 @@ GntWidget *gnt_window_box_new(gboolean homo, gboolean vert);
void gnt_window_set_menu(GntWindow *window, GntMenu *menu);
+void gnt_window_workspace_hiding(GntWindow *);
+void gnt_window_workspace_showing(GntWindow *);
+
G_END_DECLS
#endif /* GNT_WINDOW_H */
diff --git a/finch/libgnt/gntws.c b/finch/libgnt/gntws.c
index b886fca9dc..930c50ac53 100644
--- a/finch/libgnt/gntws.c
+++ b/finch/libgnt/gntws.c
@@ -1,15 +1,18 @@
#include <gmodule.h>
#include "gntbox.h"
-#include "gntws.h"
-#include "gntwm.h"
#include "gntwidget.h"
+#include "gntwindow.h"
+#include "gntwm.h"
+#include "gntws.h"
static void
widget_hide(gpointer data, gpointer nodes)
{
GntWidget *widget = GNT_WIDGET(data);
GntNode *node = g_hash_table_lookup(nodes, widget);
+ if (GNT_IS_WINDOW(widget))
+ gnt_window_workspace_hiding(GNT_WINDOW(widget));
hide_panel(node->panel);
}