1
Index: gnome-panel-2.29.92.1/gnome-panel/applet.c
2
===================================================================
3
--- gnome-panel-2.29.92.1.orig/gnome-panel/applet.c 2010-03-04 17:17:30.000000000 +0100
4
+++ gnome-panel-2.29.92.1/gnome-panel/applet.c 2010-03-19 14:48:19.000000000 +0100
6
#include "panel-globals.h"
7
#include "panel-properties-dialog.h"
8
#include "panel-lockdown.h"
9
+#include "applet-signaler.h"
11
#define SMALL_ICON_SIZE 20
16
registered_applets = g_slist_remove (registered_applets, info);
17
+ panel_applet_signaler_remove_applet(info);
19
queued_position_saves =
20
g_slist_remove (queued_position_saves, info);
21
@@ -1184,6 +1186,26 @@
25
+/** \brief Get the Bonobo IID of the Applet
26
+ \param info The AppletInfo struct representing the applet
27
+ \return Either the IID of the applet or NULL if the applet does
31
+panel_applet_get_iid (AppletInfo *info)
35
+ if (info->type != PANEL_OBJECT_BONOBO)
38
+ PanelAppletFrame * frame = PANEL_APPLET_FRAME(info->data);
40
+ return NULL; /* This should never happen, but just in case */
42
+ return panel_applet_frame_get_iid(frame);
46
panel_applet_get_id_by_widget (GtkWidget *applet_widget)
55
for (l = registered_applets; l; l = l->next) {
56
AppletInfo *info = l->data;
58
@@ -1217,6 +1242,33 @@
62
+/** \brief Will find an applet by looking for it's IID
63
+ \param iid The IID to look for in an applet
64
+ \return Either the AppletInfo structure representing the applet or
65
+ NULL if an applet with that IID can not be found.
68
+panel_applet_get_by_iid (const char *iid)
75
+ for (l = registered_applets; l; l = l->next) {
76
+ AppletInfo *info = l->data;
77
+ const char *applet_iid = panel_applet_get_iid(info);
79
+ if (applet_iid == NULL)
82
+ if (!strcmp (applet_iid, iid))
90
panel_applet_list_applets (void)
94
gtk_widget_child_focus (applet, GTK_DIR_TAB_FORWARD);
96
+ panel_applet_signaler_add_applet(info);
100
Index: gnome-panel-2.29.92.1/gnome-panel/applet.h
101
===================================================================
102
--- gnome-panel-2.29.92.1.orig/gnome-panel/applet.h 2010-01-27 16:28:13.000000000 +0100
103
+++ gnome-panel-2.29.92.1/gnome-panel/applet.h 2010-03-19 14:48:19.000000000 +0100
105
void panel_applet_stop_loading (const char *id);
107
const char *panel_applet_get_id (AppletInfo *info);
108
+const char *panel_applet_get_iid (AppletInfo *info);
109
const char *panel_applet_get_id_by_widget (GtkWidget *widget);
110
AppletInfo *panel_applet_get_by_id (const char *id);
111
+AppletInfo *panel_applet_get_by_iid (const char *iid);
112
AppletInfo *panel_applet_get_by_type (PanelObjectType object_type, GdkScreen *screen);
114
GSList *panel_applet_list_applets (void);
115
Index: gnome-panel-2.29.92.1/gnome-panel/applet-signaler.c
116
===================================================================
117
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
118
+++ gnome-panel-2.29.92.1/gnome-panel/applet-signaler.c 2010-03-19 14:48:55.000000000 +0100
1
=== modified file 'gnome-panel/Makefile.am'
2
--- old/gnome-panel/Makefile.am 2010-01-14 22:20:05 +0000
3
+++ new/gnome-panel/Makefile.am 2010-03-29 20:40:44 +0000
4
@@ -64,6 +64,7 @@ panel_sources = \
5
panel-compatibility.c \
10
panel-config-global.c \
12
@@ -109,6 +110,7 @@ panel_headers = \
13
panel-compatibility.h \
19
panel-properties-dialog.h \
21
=== added file 'gnome-panel/applet-signaler.c'
22
--- old/gnome-panel/applet-signaler.c 1970-01-01 00:00:00 +0000
23
+++ new/gnome-panel/applet-signaler.c 2010-03-29 20:40:44 +0000
121
26
+ * Fast User Switch Applet: status-manager.c
309
214
+#endif /* APPLET_SIGNALER_H */
310
Index: gnome-panel-2.29.92.1/gnome-panel/Makefile.am
311
===================================================================
312
--- gnome-panel-2.29.92.1.orig/gnome-panel/Makefile.am 2010-01-14 04:26:27.000000000 +0100
313
+++ gnome-panel-2.29.92.1/gnome-panel/Makefile.am 2010-03-19 14:48:19.000000000 +0100
315
panel-compatibility.c \
318
+ applet-signaler.c \
320
panel-config-global.c \
323
panel-compatibility.h \
326
+ applet-signaler.h \
329
panel-properties-dialog.h \
330
Index: gnome-panel-2.29.92.1/gnome-panel/panel-applet-frame.c
331
===================================================================
332
--- gnome-panel-2.29.92.1.orig/gnome-panel/panel-applet-frame.c 2010-03-04 17:39:17.000000000 +0100
333
+++ gnome-panel-2.29.92.1/gnome-panel/panel-applet-frame.c 2010-03-19 14:48:19.000000000 +0100
334
@@ -1442,3 +1442,15 @@
216
=== modified file 'gnome-panel/applet.c'
217
--- old/gnome-panel/applet.c 2010-03-09 14:38:51 +0000
218
+++ new/gnome-panel/applet.c 2010-03-29 20:40:44 +0000
220
#include "panel-globals.h"
221
#include "panel-properties-dialog.h"
222
#include "panel-lockdown.h"
223
+#include "applet-signaler.h"
225
#define SMALL_ICON_SIZE 20
227
@@ -734,6 +735,7 @@ panel_applet_destroy (GtkWidget *widget
230
registered_applets = g_slist_remove (registered_applets, info);
231
+ panel_applet_signaler_remove_applet(info);
233
queued_position_saves =
234
g_slist_remove (queued_position_saves, info);
235
@@ -1184,6 +1186,26 @@ panel_applet_get_id (AppletInfo *info)
239
+/** \brief Get the Bonobo IID of the Applet
240
+ \param info The AppletInfo struct representing the applet
241
+ \return Either the IID of the applet or NULL if the applet does
245
+panel_applet_get_iid (AppletInfo *info)
249
+ if (info->type != PANEL_OBJECT_BONOBO)
252
+ PanelAppletFrame * frame = PANEL_APPLET_FRAME(info->data);
254
+ return NULL; /* This should never happen, but just in case */
256
+ return panel_applet_frame_get_iid(frame);
260
panel_applet_get_id_by_widget (GtkWidget *applet_widget)
262
@@ -1207,6 +1229,9 @@ panel_applet_get_by_id (const char *id)
269
for (l = registered_applets; l; l = l->next) {
270
AppletInfo *info = l->data;
272
@@ -1217,6 +1242,33 @@ panel_applet_get_by_id (const char *id)
276
+/** \brief Will find an applet by looking for it's IID
277
+ \param iid The IID to look for in an applet
278
+ \return Either the AppletInfo structure representing the applet or
279
+ NULL if an applet with that IID can not be found.
282
+panel_applet_get_by_iid (const char *iid)
289
+ for (l = registered_applets; l; l = l->next) {
290
+ AppletInfo *info = l->data;
291
+ const char *applet_iid = panel_applet_get_iid(info);
293
+ if (applet_iid == NULL)
296
+ if (!strcmp (applet_iid, iid))
304
panel_applet_list_applets (void)
306
@@ -1352,6 +1404,7 @@ panel_applet_register (GtkWidget *
308
gtk_widget_child_focus (applet, GTK_DIR_TAB_FORWARD);
310
+ panel_applet_signaler_add_applet(info);
315
=== modified file 'gnome-panel/applet.h'
316
--- old/gnome-panel/applet.h 2010-01-27 17:53:50 +0000
317
+++ new/gnome-panel/applet.h 2010-03-29 20:40:44 +0000
318
@@ -56,8 +56,10 @@ AppletInfo *panel_applet_register (Gt
319
void panel_applet_stop_loading (const char *id);
321
const char *panel_applet_get_id (AppletInfo *info);
322
+const char *panel_applet_get_iid (AppletInfo *info);
323
const char *panel_applet_get_id_by_widget (GtkWidget *widget);
324
AppletInfo *panel_applet_get_by_id (const char *id);
325
+AppletInfo *panel_applet_get_by_iid (const char *iid);
326
AppletInfo *panel_applet_get_by_type (PanelObjectType object_type, GdkScreen *screen);
328
GSList *panel_applet_list_applets (void);
330
=== modified file 'gnome-panel/panel-applet-frame.c'
331
--- old/gnome-panel/panel-applet-frame.c 2010-03-09 14:38:51 +0000
332
+++ new/gnome-panel/panel-applet-frame.c 2010-03-29 20:40:44 +0000
333
@@ -1442,3 +1442,15 @@ panel_applet_frame_set_panel (PanelApple
336
335
frame->priv->panel = panel;
409
+disconnect_signalers (PanelAppletSignaler *signaler,
412
+ g_signal_handlers_disconnect_by_func (signaler,
413
+ panel_menu_bar_set_tooltip_add,
415
+ g_signal_handlers_disconnect_by_func (signaler,
416
+ panel_menu_bar_set_tooltip_remove,
410
421
panel_menu_bar_setup_tooltip (PanelMenuBar *menubar)
423
+ PanelAppletSignaler *signaler = panel_applet_signaler_get_default ();
425
panel_util_set_tooltip_text (menubar->priv->applications_item,
426
_("Browse and run installed applications"));
427
panel_util_set_tooltip_text (menubar->priv->places_item,
428
@@ -109,6 +154,16 @@ panel_menu_bar_setup_tooltip (PanelMenuB
413
429
panel_util_set_tooltip_text (menubar->priv->desktop_item,
414
430
_("Change desktop appearance and behavior, get help, or log out"));
416
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
417
+ G_CALLBACK(panel_menu_bar_set_tooltip_add), menubar->priv->desktop_item);
418
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
419
+ G_CALLBACK(panel_menu_bar_set_tooltip_remove), menubar->priv->desktop_item);
432
+ g_object_weak_ref (G_OBJECT (menubar->priv->desktop_item),
433
+ (GWeakNotify) disconnect_signalers,
436
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
437
+ G_CALLBACK(panel_menu_bar_set_tooltip_add), menubar->priv->desktop_item);
438
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
439
+ G_CALLBACK(panel_menu_bar_set_tooltip_remove), menubar->priv->desktop_item);
422
442
//FIXME: this doesn't handle the right-click case. Sigh.
423
443
/* Hide tooltip if a menu is activated */
424
444
g_signal_connect (menubar->priv->applications_item,
425
Index: gnome-panel-2.29.92.1/gnome-panel/panel-menu-items.c
426
===================================================================
427
--- gnome-panel-2.29.92.1.orig/gnome-panel/panel-menu-items.c 2010-03-19 14:48:19.000000000 +0100
428
+++ gnome-panel-2.29.92.1/gnome-panel/panel-menu-items.c 2010-03-19 14:48:19.000000000 +0100
446
=== modified file 'gnome-panel/panel-menu-items.c'
447
--- old/gnome-panel/panel-menu-items.c 2010-03-09 14:38:51 +0000
448
+++ new/gnome-panel/panel-menu-items.c 2010-03-29 20:40:44 +0000
429
449
@@ -54,6 +54,7 @@
430
450
#include "panel-recent.h"
431
451
#include "panel-stock-icons.h"
502
+disconnect_signalers (PanelAppletSignaler *signaler,
505
+ g_signal_handlers_disconnect_by_func (signaler,
506
+ panel_menu_items_hide_on_fusa,
508
+ g_signal_handlers_disconnect_by_func (signaler,
509
+ panel_menu_items_show_on_fusa,
482
514
panel_menu_items_append_lock_logout (GtkWidget *menu)
484
@@ -1543,6 +1584,10 @@
516
@@ -1532,6 +1585,11 @@ panel_menu_items_append_lock_logout (Gtk
485
517
const char *translate;
488
520
+ GtkWidget *separator = NULL;
489
521
+ AppletInfo *fusa = NULL;
522
+ PanelAppletSignaler *signaler = panel_applet_signaler_get_default ();
491
524
+ fusa = panel_applet_get_by_iid(FUSA_APPLET_IID);
493
526
separator_inserted = FALSE;
494
527
children = gtk_container_get_children (GTK_CONTAINER (menu));
495
@@ -1550,17 +1595,34 @@
528
@@ -1539,17 +1597,42 @@ panel_menu_items_append_lock_logout (Gtk
496
529
if (last != NULL) {
497
530
separator_inserted = GTK_IS_SEPARATOR (GTK_WIDGET (last->data));
499
532
+ if (separator_inserted) {
500
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
501
+ G_CALLBACK(panel_menu_items_hide_on_fusa), last->data);
502
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
503
+ G_CALLBACK(panel_menu_items_show_on_fusa), last->data);
533
+ g_object_weak_ref (G_OBJECT (last->data),
534
+ (GWeakNotify) disconnect_signalers,
537
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
538
+ G_CALLBACK(panel_menu_items_hide_on_fusa), last->data);
539
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
540
+ G_CALLBACK(panel_menu_items_show_on_fusa), last->data);
504
541
+ if (fusa != NULL) {
505
542
+ gtk_widget_hide(GTK_WIDGET(last->data));
519
556
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
521
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
558
+ g_object_weak_ref (G_OBJECT (item),
559
+ (GWeakNotify) disconnect_signalers,
562
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
522
563
+ G_CALLBACK(panel_menu_items_hide_on_fusa), item);
523
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
564
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
524
565
+ G_CALLBACK(panel_menu_items_show_on_fusa), item);
525
566
+ if (fusa != NULL) {
526
567
+ gtk_widget_hide(GTK_WIDGET(item));
540
581
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
542
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
543
+ G_CALLBACK(panel_menu_items_hide_on_fusa), item);
544
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
545
+ G_CALLBACK(panel_menu_items_show_on_fusa), item);
583
+ g_object_weak_ref (G_OBJECT (item),
584
+ (GWeakNotify) disconnect_signalers,
587
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
588
+ G_CALLBACK(panel_menu_items_hide_on_fusa), item);
589
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
590
+ G_CALLBACK(panel_menu_items_show_on_fusa), item);
546
591
+ if (fusa != NULL) {
547
592
+ gtk_widget_hide(GTK_WIDGET(item));
557
602
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
559
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
560
+ G_CALLBACK(panel_menu_items_hide_on_fusa), item);
561
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
562
+ G_CALLBACK(panel_menu_items_show_on_fusa), item);
604
+ g_object_weak_ref (G_OBJECT (item),
605
+ (GWeakNotify) disconnect_signalers,
608
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
609
+ G_CALLBACK(panel_menu_items_hide_on_fusa), item);
610
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
611
+ G_CALLBACK(panel_menu_items_show_on_fusa), item);
563
612
+ if (fusa != NULL) {
564
613
+ gtk_widget_hide(GTK_WIDGET(item));
574
623
+ * on here as the local variable becomes a pointer to that created
575
624
+ * seperator. Whew. */
576
625
+ if (separator != NULL) {
577
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
578
+ G_CALLBACK(panel_menu_items_hide_on_fusa), separator);
579
+ g_signal_connect(panel_applet_signaler_get_default(), PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
580
+ G_CALLBACK(panel_menu_items_show_on_fusa), separator);
626
+ g_object_weak_ref (G_OBJECT (separator),
627
+ (GWeakNotify) disconnect_signalers,
630
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
631
+ G_CALLBACK(panel_menu_items_hide_on_fusa), separator);
632
+ g_signal_connect(signaler, PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
633
+ G_CALLBACK(panel_menu_items_show_on_fusa), separator);
581
634
+ if (fusa != NULL) {
582
635
+ gtk_widget_hide(GTK_WIDGET(separator));