updated on Thu Jan 19 16:10:29 UTC 2012
[aur-mirror.git] / gnome-panel-ubuntu / 25_dynamic_fusa_detection.patch
blob369bc87b5687fc57f3c106f0be8b1d18d0f8a2b1
1 Description: Remove the shutdown, logout and lock screen items when the FUSA applet is on the panel
2 Bug: https://bugs.launchpad.net/ubuntu/+source/gnome-panel/+bug/335242
4 === modified file 'gnome-panel/Makefile.am'
5 Index: gnome-panel-2.30.0/gnome-panel/Makefile.am
6 ===================================================================
7 --- gnome-panel-2.30.0.orig/gnome-panel/Makefile.am 2010-01-14 14:26:27.000000000 +1100
8 +++ gnome-panel-2.30.0/gnome-panel/Makefile.am 2010-06-03 13:58:06.873946772 +1000
9 @@ -64,6 +64,7 @@
10 panel-compatibility.c \
11 panel.c \
12 applet.c \
13 + applet-signaler.c \
14 drawer.c \
15 panel-config-global.c \
16 panel-util.c \
17 @@ -109,6 +110,7 @@
18 panel-compatibility.h \
19 panel.h \
20 applet.h \
21 + applet-signaler.h \
22 drawer.h \
23 panel-util.h \
24 panel-properties-dialog.h \
25 Index: gnome-panel-2.30.0/gnome-panel/applet-signaler.c
26 ===================================================================
27 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
28 +++ gnome-panel-2.30.0/gnome-panel/applet-signaler.c 2010-06-03 13:58:06.873946772 +1000
29 @@ -0,0 +1,133 @@
30 +/*
31 + * Fast User Switch Applet: status-manager.c
32 + *
33 + * Copyright (C) 2008 Canonical, Ltd.
34 + * Authors:
35 + * Ted Gould <ted@canonical.com>
36 + *
37 + * This program is free software; you can redistribute it and/or modify
38 + * it under the terms of the GNU General Public License as published by
39 + * the Free Software Foundation; either version 2 of the License, or
40 + * (at your option) any later version.
41 + *
42 + * This program is distributed in the hope that it will be useful,
43 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
44 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45 + * GNU General Public License for more details.
46 + *
47 + * You should have received a copy of the GNU General Public License
48 + * along with this program; if not, write to the Free Software
49 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
50 + */
52 +#include "applet-signaler.h"
54 +#define PANEL_APPLET_SIGNALER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANEL_TYPE_APPLET_SIGNALER, PanelAppletSignalerClass))
55 +#define PANEL_IS_APPLET_SIGNALER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANEL_TYPE_APPLET_SIGNALER))
56 +#define PANEL_APPLET_SIGNALER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANEL_TYPE_APPLET_SIGNALER, PanelAppletSignalerClass))
58 +/* Signals */
59 +enum {
60 + APPLET_ADDED,
61 + APPLET_REMOVED,
62 + LAST_SIGNAL
63 +};
65 +struct _PanelAppletSignaler
67 + GObject parent;
68 +};
70 +typedef struct _PanelAppletSignalerClass
72 + GObjectClass parent_class;
74 + PanelAppletSignalerFunc applet_added;
75 + PanelAppletSignalerFunc applet_removed;
77 +PanelAppletSignalerClass;
79 +guint signals[LAST_SIGNAL] = {0};
81 +G_DEFINE_TYPE (PanelAppletSignaler, panel_applet_signaler, G_TYPE_OBJECT);
83 +static void
84 +panel_applet_signaler_finalize (GObject * obj)
86 + return;
89 +static void
90 +panel_applet_signaler_class_init (PanelAppletSignalerClass * class)
92 + GObjectClass * gobj;
93 + gobj = G_OBJECT_CLASS(class);
95 + gobj->finalize = panel_applet_signaler_finalize;
97 + /* Signals */
98 + signals[APPLET_ADDED] = g_signal_new (PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
99 + G_TYPE_FROM_CLASS(class),
100 + G_SIGNAL_RUN_LAST,
101 + G_STRUCT_OFFSET(PanelAppletSignalerClass, applet_added),
102 + NULL, NULL, /* accumulator */
103 + g_cclosure_marshal_VOID__POINTER,
104 + G_TYPE_NONE, /* Return value */
105 + 1, G_TYPE_POINTER); /* Parameters */
107 + signals[APPLET_REMOVED] = g_signal_new (PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
108 + G_TYPE_FROM_CLASS(class),
109 + G_SIGNAL_RUN_LAST,
110 + G_STRUCT_OFFSET(PanelAppletSignalerClass, applet_removed),
111 + NULL, NULL, /* accumulator */
112 + g_cclosure_marshal_VOID__POINTER,
113 + G_TYPE_NONE, /* Return value */
114 + 1, G_TYPE_POINTER); /* Parameters */
116 + return;
119 +static void
120 +panel_applet_signaler_init (PanelAppletSignaler * pas)
122 + return;
125 +static PanelAppletSignaler * default_signaler = NULL;
127 +PanelAppletSignaler *
128 +panel_applet_signaler_get_default (void)
130 + if (default_signaler == NULL) {
131 + default_signaler = g_object_new(PANEL_TYPE_APPLET_SIGNALER, NULL);
132 + g_object_add_weak_pointer(G_OBJECT(default_signaler),
133 + (gpointer *)&default_signaler);
136 + return default_signaler;
139 +static guint applet_count = 0;
141 +void
142 +panel_applet_signaler_add_applet (AppletInfo * applet)
144 + /* Ensure that one is created */
145 + PanelAppletSignaler * signaler = panel_applet_signaler_get_default();
147 + g_signal_emit(signaler, signals[APPLET_ADDED], NULL, applet);
149 + return;
152 +void
153 +panel_applet_signaler_remove_applet (AppletInfo * applet)
155 + /* Ensure that one is created */
156 + PanelAppletSignaler * signaler = panel_applet_signaler_get_default();
158 + g_signal_emit(signaler, signals[APPLET_REMOVED], NULL, applet);
160 + return;
163 Index: gnome-panel-2.30.0/gnome-panel/applet-signaler.h
164 ===================================================================
165 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
166 +++ gnome-panel-2.30.0/gnome-panel/applet-signaler.h 2010-06-03 13:58:06.873946772 +1000
167 @@ -0,0 +1,52 @@
169 + * Fast User Switch Applet: status-manager.c
170 + *
171 + * Copyright (C) 2008 Canonical, Ltd.
172 + * Authors:
173 + * Ted Gould <ted@canonical.com>
175 + * This program is free software; you can redistribute it and/or modify
176 + * it under the terms of the GNU General Public License as published by
177 + * the Free Software Foundation; either version 2 of the License, or
178 + * (at your option) any later version.
180 + * This program is distributed in the hope that it will be useful,
181 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
182 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
183 + * GNU General Public License for more details.
185 + * You should have received a copy of the GNU General Public License
186 + * along with this program; if not, write to the Free Software
187 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
188 + */
190 +#ifndef APPLET_SIGNALER_H
191 +#define APPLET_SIGNALER_H
193 +#include <glib.h>
194 +#include "applet.h"
196 +G_BEGIN_DECLS
198 +/* Applet Signaler */
199 +/* Singleton Object to handle the world of applets */
201 +#define PANEL_TYPE_APPLET_SIGNALER (panel_applet_signaler_get_type())
202 +#define PANEL_APPLET_SIGNALER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANEL_TYPE_APPLET_SIGNALER, PanelAppletSignaler))
203 +#define PANEL_IS_APPLET_SIGNALER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANEL_TYPE_APPLET_SIGNALER))
205 +#define PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED "applet-added"
206 +#define PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED "applet-removed"
208 +typedef struct _PanelAppletSignaler PanelAppletSignaler;
209 +typedef void (*PanelAppletSignalerFunc)(PanelAppletSignaler * pas, AppletInfo * info, gpointer data);
211 +GType panel_applet_signaler_get_type (void) G_GNUC_CONST;
212 +PanelAppletSignaler * panel_applet_signaler_get_default (void);
214 +void panel_applet_signaler_add_applet (AppletInfo * applet);
215 +void panel_applet_signaler_remove_applet (AppletInfo * applet);
217 +G_END_DECLS
219 +#endif /* APPLET_SIGNALER_H */
220 Index: gnome-panel-2.30.0/gnome-panel/applet.c
221 ===================================================================
222 --- gnome-panel-2.30.0.orig/gnome-panel/applet.c 2010-03-05 03:17:30.000000000 +1100
223 +++ gnome-panel-2.30.0/gnome-panel/applet.c 2010-06-03 13:58:06.873946772 +1000
224 @@ -34,6 +34,7 @@
225 #include "panel-globals.h"
226 #include "panel-properties-dialog.h"
227 #include "panel-lockdown.h"
228 +#include "applet-signaler.h"
230 #define SMALL_ICON_SIZE 20
232 @@ -734,6 +735,7 @@
233 info->widget = NULL;
235 registered_applets = g_slist_remove (registered_applets, info);
236 + panel_applet_signaler_remove_applet(info);
238 queued_position_saves =
239 g_slist_remove (queued_position_saves, info);
240 @@ -1184,6 +1186,26 @@
241 return info->id;
244 +/** \brief Get the Bonobo IID of the Applet
245 + \param info The AppletInfo struct representing the applet
246 + \return Either the IID of the applet or NULL if the applet does
247 + not have an IID.
249 +const char *
250 +panel_applet_get_iid (AppletInfo *info)
252 + if (!info)
253 + return NULL;
254 + if (info->type != PANEL_OBJECT_BONOBO)
255 + return NULL;
257 + PanelAppletFrame * frame = PANEL_APPLET_FRAME(info->data);
258 + if (frame == NULL)
259 + return NULL; /* This should never happen, but just in case */
261 + return panel_applet_frame_get_iid(frame);
264 const char *
265 panel_applet_get_id_by_widget (GtkWidget *applet_widget)
267 @@ -1207,6 +1229,9 @@
269 GSList *l;
271 + if (id == NULL)
272 + return NULL;
274 for (l = registered_applets; l; l = l->next) {
275 AppletInfo *info = l->data;
277 @@ -1217,6 +1242,33 @@
278 return NULL;
281 +/** \brief Will find an applet by looking for it's IID
282 + \param iid The IID to look for in an applet
283 + \return Either the AppletInfo structure representing the applet or
284 + NULL if an applet with that IID can not be found.
286 +AppletInfo *
287 +panel_applet_get_by_iid (const char *iid)
289 + GSList *l;
291 + if (iid == NULL)
292 + return NULL;
294 + for (l = registered_applets; l; l = l->next) {
295 + AppletInfo *info = l->data;
296 + const char *applet_iid = panel_applet_get_iid(info);
298 + if (applet_iid == NULL)
299 + continue;
301 + if (!strcmp (applet_iid, iid))
302 + return info;
305 + return NULL;
308 GSList *
309 panel_applet_list_applets (void)
311 @@ -1352,6 +1404,7 @@
312 else
313 gtk_widget_child_focus (applet, GTK_DIR_TAB_FORWARD);
315 + panel_applet_signaler_add_applet(info);
316 return info;
319 Index: gnome-panel-2.30.0/gnome-panel/applet.h
320 ===================================================================
321 --- gnome-panel-2.30.0.orig/gnome-panel/applet.h 2010-01-28 02:28:13.000000000 +1100
322 +++ gnome-panel-2.30.0/gnome-panel/applet.h 2010-06-03 13:58:06.873946772 +1000
323 @@ -56,8 +56,10 @@
324 void panel_applet_stop_loading (const char *id);
326 const char *panel_applet_get_id (AppletInfo *info);
327 +const char *panel_applet_get_iid (AppletInfo *info);
328 const char *panel_applet_get_id_by_widget (GtkWidget *widget);
329 AppletInfo *panel_applet_get_by_id (const char *id);
330 +AppletInfo *panel_applet_get_by_iid (const char *iid);
331 AppletInfo *panel_applet_get_by_type (PanelObjectType object_type, GdkScreen *screen);
333 GSList *panel_applet_list_applets (void);
334 Index: gnome-panel-2.30.0/gnome-panel/panel-applet-frame.c
335 ===================================================================
336 --- gnome-panel-2.30.0.orig/gnome-panel/panel-applet-frame.c 2010-03-05 03:39:17.000000000 +1100
337 +++ gnome-panel-2.30.0/gnome-panel/panel-applet-frame.c 2010-06-03 13:58:06.873946772 +1000
338 @@ -1442,3 +1442,15 @@
340 frame->priv->panel = panel;
343 +/** \brief Gets the IID for a panel applet frame
344 + \param frame Applet frame
345 + \return The IID of the applet or NULL on error
347 +const gchar *
348 +panel_applet_frame_get_iid (PanelAppletFrame * frame)
350 + g_return_val_if_fail (PANEL_IS_APPLET_FRAME (frame), NULL);
352 + return frame->priv->iid;
354 Index: gnome-panel-2.30.0/gnome-panel/panel-applet-frame.h
355 ===================================================================
356 --- gnome-panel-2.30.0.orig/gnome-panel/panel-applet-frame.h 2009-08-12 06:39:33.000000000 +1000
357 +++ gnome-panel-2.30.0/gnome-panel/panel-applet-frame.h 2010-06-03 13:58:06.873946772 +1000
358 @@ -78,6 +78,8 @@
359 void panel_applet_frame_set_panel (PanelAppletFrame *frame,
360 PanelWidget *panel);
362 +const gchar * panel_applet_frame_get_iid (PanelAppletFrame * frame);
364 G_END_DECLS
366 #endif /* __PANEL_APPLET_FRAME_H__ */
367 Index: gnome-panel-2.30.0/gnome-panel/panel-menu-bar.c
368 ===================================================================
369 --- gnome-panel-2.30.0.orig/gnome-panel/panel-menu-bar.c 2010-06-03 13:58:03.123946697 +1000
370 +++ gnome-panel-2.30.0/gnome-panel/panel-menu-bar.c 2010-06-03 13:58:06.883949161 +1000
371 @@ -47,6 +47,7 @@
372 #include "panel-stock-icons.h"
373 #include "panel-typebuiltins.h"
374 #include "panel-icon-names.h"
375 +#include "applet-signaler.h"
377 G_DEFINE_TYPE (PanelMenuBar, panel_menu_bar, GTK_TYPE_MENU_BAR)
379 @@ -99,9 +100,53 @@
380 return FALSE;
383 +#define FUSA_APPLET_IID "OAFIID:GNOME_FastUserSwitchApplet"
385 +static void
386 +panel_menu_bar_set_tooltip_remove (PanelAppletSignaler * pas, AppletInfo * info, GtkWidget * widget)
388 + const char * iid = panel_applet_get_iid(info);
389 + if (iid == NULL)
390 + return;
392 + if (!strcmp(iid, FUSA_APPLET_IID))
393 + panel_util_set_tooltip_text (widget,
394 + _("Change desktop appearance and behavior, get help, or log out"));
396 + return;
399 +static void
400 +panel_menu_bar_set_tooltip_add (PanelAppletSignaler * pas, AppletInfo * info, GtkWidget * widget)
402 + const char * iid = panel_applet_get_iid(info);
403 + if (iid == NULL)
404 + return;
406 + if (!strcmp(iid, FUSA_APPLET_IID))
407 + panel_util_set_tooltip_text (widget,
408 + _("Change system appearance and behavior, or get help"));
410 + return;
413 +static void
414 +disconnect_signalers (PanelAppletSignaler *signaler,
415 + GtkWidget *widget)
417 + g_signal_handlers_disconnect_by_func (signaler,
418 + panel_menu_bar_set_tooltip_add,
419 + widget);
420 + g_signal_handlers_disconnect_by_func (signaler,
421 + panel_menu_bar_set_tooltip_remove,
422 + widget);
425 static void
426 panel_menu_bar_setup_tooltip (PanelMenuBar *menubar)
428 + PanelAppletSignaler *signaler = panel_applet_signaler_get_default ();
430 panel_util_set_tooltip_text (menubar->priv->applications_item,
431 _("Browse and run installed applications"));
432 panel_util_set_tooltip_text (menubar->priv->places_item,
433 @@ -109,6 +154,16 @@
434 panel_util_set_tooltip_text (menubar->priv->desktop_item,
435 _("Change desktop appearance and behavior, get help, or log out"));
437 + g_object_weak_ref (G_OBJECT (menubar->priv->desktop_item),
438 + (GWeakNotify) disconnect_signalers,
439 + signaler);
441 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
442 + G_CALLBACK(panel_menu_bar_set_tooltip_add), menubar->priv->desktop_item);
443 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
444 + G_CALLBACK(panel_menu_bar_set_tooltip_remove), menubar->priv->desktop_item);
447 //FIXME: this doesn't handle the right-click case. Sigh.
448 /* Hide tooltip if a menu is activated */
449 g_signal_connect (menubar->priv->applications_item,
450 Index: gnome-panel-2.30.0/gnome-panel/panel-menu-items.c
451 ===================================================================
452 --- gnome-panel-2.30.0.orig/gnome-panel/panel-menu-items.c 2010-06-03 13:57:54.293946027 +1000
453 +++ gnome-panel-2.30.0/gnome-panel/panel-menu-items.c 2010-06-03 13:58:06.883949161 +1000
454 @@ -54,6 +54,7 @@
455 #include "panel-recent.h"
456 #include "panel-stock-icons.h"
457 #include "panel-util.h"
458 +#include "applet-signaler.h"
460 #define BOOKMARKS_FILENAME ".gtk-bookmarks"
461 #define DESKTOP_IS_HOME_DIR_DIR "/apps/nautilus/preferences"
462 @@ -1533,6 +1534,58 @@
463 "menu_panel", panel);
466 +#define FUSA_APPLET_IID "OAFIID:GNOME_FastUserSwitchApplet"
468 +static void
469 +panel_menu_items_hide_on_fusa (PanelAppletSignaler * pas, AppletInfo * info, GtkWidget * widget)
471 + /* check if we are running stracciatella session */
472 + if (g_strcmp0(g_getenv("GDMSESSION"), "gnome-stracciatella") == 0) {
473 + g_debug("Running stracciatella GNOME session, not touching menu items");
474 + return TRUE;
477 + const char * iid = panel_applet_get_iid(info);
478 + if (iid == NULL)
479 + return;
481 + if (!strcmp(iid, FUSA_APPLET_IID))
482 + gtk_widget_hide(widget);
484 + return;
487 +static void
488 +panel_menu_items_show_on_fusa (PanelAppletSignaler * pas, AppletInfo * info, GtkWidget * widget)
490 + /* check if we are running stracciatella session */
491 + if (g_strcmp0(g_getenv("GDMSESSION"), "gnome-stracciatella") == 0) {
492 + g_debug("Running stracciatella GNOME session, not touching menu items");
493 + return TRUE;
496 + const char * iid = panel_applet_get_iid(info);
497 + if (iid == NULL)
498 + return;
500 + if (!strcmp(iid, FUSA_APPLET_IID))
501 + gtk_widget_show(widget);
503 + return;
506 +static void
507 +disconnect_signalers (PanelAppletSignaler *signaler,
508 + GtkWidget *widget)
510 + g_signal_handlers_disconnect_by_func (signaler,
511 + panel_menu_items_hide_on_fusa,
512 + widget);
513 + g_signal_handlers_disconnect_by_func (signaler,
514 + panel_menu_items_show_on_fusa,
515 + widget);
518 void
519 panel_menu_items_append_lock_logout (GtkWidget *menu)
521 @@ -1543,6 +1596,11 @@
522 const char *translate;
523 char *label;
524 char *tooltip;
525 + GtkWidget *separator = NULL;
526 + AppletInfo *fusa = NULL;
527 + PanelAppletSignaler *signaler = panel_applet_signaler_get_default ();
529 + fusa = panel_applet_get_by_iid(FUSA_APPLET_IID);
531 separator_inserted = FALSE;
532 children = gtk_container_get_children (GTK_CONTAINER (menu));
533 @@ -1550,17 +1608,42 @@
534 if (last != NULL) {
535 separator_inserted = GTK_IS_SEPARATOR (GTK_WIDGET (last->data));
537 + if (separator_inserted) {
538 + g_object_weak_ref (G_OBJECT (last->data),
539 + (GWeakNotify) disconnect_signalers,
540 + signaler);
542 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
543 + G_CALLBACK(panel_menu_items_hide_on_fusa), last->data);
544 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
545 + G_CALLBACK(panel_menu_items_show_on_fusa), last->data);
546 + if (fusa != NULL) {
547 + gtk_widget_hide(GTK_WIDGET(last->data));
550 g_list_free (children);
552 if (panel_lock_screen_action_available ("lock")) {
553 item = panel_menu_items_create_action_item (PANEL_ACTION_LOCK);
554 if (item != NULL) {
555 if (!separator_inserted) {
556 - add_menu_separator (menu);
557 + separator = add_menu_separator (menu);
558 separator_inserted = TRUE;
561 gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
563 + g_object_weak_ref (G_OBJECT (item),
564 + (GWeakNotify) disconnect_signalers,
565 + signaler);
567 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
568 + G_CALLBACK(panel_menu_items_hide_on_fusa), item);
569 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
570 + G_CALLBACK(panel_menu_items_show_on_fusa), item);
571 + if (fusa != NULL) {
572 + gtk_widget_hide(GTK_WIDGET(item));
577 @@ -1603,19 +1686,65 @@
579 if (item != NULL) {
580 if (!separator_inserted) {
581 - add_menu_separator (menu);
582 + separator = add_menu_separator (menu);
583 separator_inserted = TRUE;
586 gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
588 + g_object_weak_ref (G_OBJECT (item),
589 + (GWeakNotify) disconnect_signalers,
590 + signaler);
592 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
593 + G_CALLBACK(panel_menu_items_hide_on_fusa), item);
594 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
595 + G_CALLBACK(panel_menu_items_show_on_fusa), item);
596 + if (fusa != NULL) {
597 + gtk_widget_hide(GTK_WIDGET(item));
601 item = panel_menu_items_create_action_item (PANEL_ACTION_SHUTDOWN);
602 if (item != NULL) {
603 if (!separator_inserted)
604 - add_menu_separator (menu);
605 + separator = add_menu_separator (menu);
607 gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
609 + g_object_weak_ref (G_OBJECT (item),
610 + (GWeakNotify) disconnect_signalers,
611 + signaler);
613 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
614 + G_CALLBACK(panel_menu_items_hide_on_fusa), item);
615 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
616 + G_CALLBACK(panel_menu_items_show_on_fusa), item);
617 + if (fusa != NULL) {
618 + gtk_widget_hide(GTK_WIDGET(item));
622 + /* Okay, this is confusing, but required to make the patch
623 + * smaller. Basically if the seperator was created externally it
624 + * gets the signal handlers added when it is detected, but the
625 + * local variable remains NULL. This allows the return in the
626 + * middle to still work. But, if the seperator gets built in the
627 + * remainder of this function then the signal handlers get added
628 + * on here as the local variable becomes a pointer to that created
629 + * seperator. Whew. */
630 + if (separator != NULL) {
631 + g_object_weak_ref (G_OBJECT (separator),
632 + (GWeakNotify) disconnect_signalers,
633 + signaler);
635 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
636 + G_CALLBACK(panel_menu_items_hide_on_fusa), separator);
637 + g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
638 + G_CALLBACK(panel_menu_items_show_on_fusa), separator);
639 + if (fusa != NULL) {
640 + gtk_widget_hide(GTK_WIDGET(separator));