Merge lp:~ted/libdbusmenu/handle-event-signal into lp:libdbusmenu/0.5

Proposed by Ted Gould
Status: Merged
Merged at revision: 230
Proposed branch: lp:~ted/libdbusmenu/handle-event-signal
Merge into: lp:libdbusmenu/0.5
Diff against target: 95 lines (+28/-2)
3 files modified
libdbusmenu-glib/menuitem-marshal.list (+1/-0)
libdbusmenu-glib/menuitem.c (+23/-1)
libdbusmenu-glib/menuitem.h (+4/-1)
To merge this branch: bzr merge lp:~ted/libdbusmenu/handle-event-signal
Reviewer Review Type Date Requested Status
Mikkel Kamstrup Erlandsen (community) Approve
Ted Gould (community) Needs Resubmitting
Review via email: mp+50785@code.launchpad.net

Description of the change

Add a signal for generic events to make some situations where we don't have to subclass.

To post a comment you must log in.
Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

It may be a good idea to follow the standard gtk event model here - use a signal which returns a gboolean TRUE if event propogation should be stopped?

Now that GLib has a build in accumulator g_signal_accumulator_true_handled this should be fairly easy.

review: Needs Information
Revision history for this message
Ted Gould (ted) wrote :

Good idea. Fixed in r204.

  review resubmit

review: Needs Resubmitting
204. By Ted Gould

Switch signal handler to return bool so that we can signal if someone has handled it

Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

I like!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'libdbusmenu-glib/menuitem-marshal.list'
2--- libdbusmenu-glib/menuitem-marshal.list 2010-11-18 03:11:40 +0000
3+++ libdbusmenu-glib/menuitem-marshal.list 2011-02-23 15:38:29 +0000
4@@ -4,3 +4,4 @@
5 VOID: OBJECT
6 VOID: VOID
7 VOID: UINT
8+BOOLEAN: STRING, VARIANT, UINT
9
10=== modified file 'libdbusmenu-glib/menuitem.c'
11--- libdbusmenu-glib/menuitem.c 2011-02-22 03:41:54 +0000
12+++ libdbusmenu-glib/menuitem.c 2011-02-23 15:38:29 +0000
13@@ -73,6 +73,7 @@
14 REALIZED,
15 SHOW_TO_USER,
16 ABOUT_TO_SHOW,
17+ EVENT,
18 LAST_SIGNAL
19 };
20
21@@ -246,6 +247,23 @@
22 NULL, NULL,
23 _dbusmenu_menuitem_marshal_VOID__VOID,
24 G_TYPE_BOOLEAN, 0, G_TYPE_NONE);
25+ /**
26+ DbusmenuMenuitem::event:
27+ @arg0: The #DbusmenuMenuitem object.
28+ @arg1: Name of the event
29+ @arg2: Information passed along with the event
30+ @arg3: X11 timestamp of when the event happened
31+
32+ Emitted when an event is passed through. The event is signalled
33+ after handle_event is called.
34+ */
35+ signals[EVENT] = g_signal_new(DBUSMENU_MENUITEM_SIGNAL_EVENT,
36+ G_TYPE_FROM_CLASS(klass),
37+ G_SIGNAL_RUN_LAST,
38+ G_STRUCT_OFFSET(DbusmenuMenuitemClass, event),
39+ g_signal_accumulator_true_handled, NULL,
40+ _dbusmenu_menuitem_marshal_BOOLEAN__STRING_VARIANT_UINT,
41+ G_TYPE_BOOLEAN, 3, G_TYPE_STRING, G_TYPE_VARIANT, G_TYPE_UINT);
42
43 g_object_class_install_property (object_class, PROP_ID,
44 g_param_spec_int(PROP_ID_S, "ID for the menu item",
45@@ -1515,9 +1533,13 @@
46 #endif
47 DbusmenuMenuitemClass * class = DBUSMENU_MENUITEM_GET_CLASS(mi);
48
49- if (class->handle_event != NULL) {
50+ gboolean handled = FALSE;
51+ g_signal_emit(G_OBJECT(mi), EVENT, g_quark_from_string(name), name, variant, timestamp, &handled);
52+
53+ if (!handled && class->handle_event != NULL) {
54 return class->handle_event(mi, name, variant, timestamp);
55 }
56+
57 return;
58 }
59
60
61=== modified file 'libdbusmenu-glib/menuitem.h'
62--- libdbusmenu-glib/menuitem.h 2011-02-21 12:12:33 +0000
63+++ libdbusmenu-glib/menuitem.h 2011-02-23 15:38:29 +0000
64@@ -51,6 +51,7 @@
65 #define DBUSMENU_MENUITEM_SIGNAL_REALIZED_ID (g_signal_lookup(DBUSMENU_MENUITEM_SIGNAL_REALIZED, DBUSMENU_TYPE_MENUITEM))
66 #define DBUSMENU_MENUITEM_SIGNAL_SHOW_TO_USER "show-to-user"
67 #define DBUSMENU_MENUITEM_SIGNAL_ABOUT_TO_SHOW "about-to-show"
68+#define DBUSMENU_MENUITEM_SIGNAL_EVENT "event"
69
70 #define DBUSMENU_MENUITEM_PROP_TYPE "type"
71 #define DBUSMENU_MENUITEM_PROP_VISIBLE "visible"
72@@ -134,6 +135,7 @@
73 * @handle_event: This function is to override how events are handled by subclasses. Look at #dbusmenu_menuitem_handle_event for lots of good information.
74 * @send_about_to_show: Virtual function that notifies server that the client is about to show a menu.
75 * @show_to_user: Slot for #DbusmenuMenuitem::show-to-user.
76+ * @event: Slot for #DbsumenuMenuitem::event.
77 *
78 * @reserved1: Reserved for future use.
79 * @reserved2: Reserved for future use.
80@@ -163,13 +165,14 @@
81 void (*show_to_user) (DbusmenuMenuitem * mi, guint timestamp, gpointer cb_data);
82 gboolean (*about_to_show) (void);
83
84+ void (*event) (const gchar * name, GVariant * value, guint timestamp);
85+
86 /*< Private >*/
87 void (*reserved1) (void);
88 void (*reserved2) (void);
89 void (*reserved3) (void);
90 void (*reserved4) (void);
91 void (*reserved5) (void);
92- void (*reserved6) (void);
93 };
94
95 GType dbusmenu_menuitem_get_type (void);

Subscribers

People subscribed via source and target branches