From e84ef2f86d5005d6b7c298be37fd25c527d1a6fe Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 19 May 2009 05:04:04 +0200 Subject: Switching over to some autogenerated menu files instead of our test ones. --- libdbusmenu-gtk/Makefile.am | 4 ++-- libdbusmenu-gtk/menu.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ libdbusmenu-gtk/menu.h | 33 ++++++++++++++++++++++++++++++ libdbusmenu-gtk/test.c | 4 ---- libdbusmenu-gtk/test.h | 2 -- 5 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 libdbusmenu-gtk/menu.c create mode 100644 libdbusmenu-gtk/menu.h delete mode 100644 libdbusmenu-gtk/test.c delete mode 100644 libdbusmenu-gtk/test.h (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/Makefile.am b/libdbusmenu-gtk/Makefile.am index 1e36228..364da62 100644 --- a/libdbusmenu-gtk/Makefile.am +++ b/libdbusmenu-gtk/Makefile.am @@ -8,10 +8,10 @@ lib_LTLIBRARIES = \ libdbusmenu_gtkincludedir=$(includedir)/libdbusmenu-0.1/libdbusmenu-gtk/ libdbusmenu_gtkinclude_HEADERS = \ - test.h + menu.h libdbusmenu_gtk_la_SOURCES = \ - test.c + menu.c libdbusmenu_gtk_la_LDFLAGS = \ -version-info $(LIBDBUSMENU_CURRENT):$(LIBDBUSMENU_REVISION):$(LIBDBUSMENU_AGE) \ diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c new file mode 100644 index 0000000..3e0a006 --- /dev/null +++ b/libdbusmenu-gtk/menu.c @@ -0,0 +1,49 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +typedef struct _MenuPrivate MenuPrivate; + +struct _MenuPrivate +{ +}; + +#define MENU_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), MENU_TYPE, MenuPrivate)) + +static void menu_class_init (MenuClass *klass); +static void menu_init (Menu *self); +static void menu_dispose (GObject *object); +static void menu_finalize (GObject *object); + +G_DEFINE_TYPE (Menu, menu, GTK_TYPE_MENU); + +static void +menu_class_init (MenuClass *klass) +{ +GObjectClass *object_class = G_OBJECT_CLASS (klass); + +g_type_class_add_private (klass, sizeof (MenuPrivate)); + +object_class->dispose = menu_dispose; +object_class->finalize = menu_finalize; +} + +static void +menu_init (Menu *self) +{ +} + +static void +menu_dispose (GObject *object) +{ +G_OBJECT_CLASS (menu_parent_class)->dispose (object); +} + +static void +menu_finalize (GObject *object) +{ +G_OBJECT_CLASS (menu_parent_class)->finalize (object); +} diff --git a/libdbusmenu-gtk/menu.h b/libdbusmenu-gtk/menu.h new file mode 100644 index 0000000..783737a --- /dev/null +++ b/libdbusmenu-gtk/menu.h @@ -0,0 +1,33 @@ +#ifndef __MENU_H__ +#define __MENU_H__ + +#include +#include + +G_BEGIN_DECLS + +#define MENU_TYPE (menu_get_type ()) +#define MENU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MENU_TYPE, Menu)) +#define MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MENU_TYPE, MenuClass)) +#define IS_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MENU_TYPE)) +#define IS_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MENU_TYPE)) +#define MENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MENU_TYPE, MenuClass)) + +typedef struct _Menu Menu; +typedef struct _MenuClass MenuClass; + +struct _MenuClass +{ +GtkMenuClass parent_class; +}; + +struct _Menu +{ +GtkMenu parent; +}; + +GType menu_get_type (void); + +G_END_DECLS + +#endif diff --git a/libdbusmenu-gtk/test.c b/libdbusmenu-gtk/test.c deleted file mode 100644 index 8ebb3f7..0000000 --- a/libdbusmenu-gtk/test.c +++ /dev/null @@ -1,4 +0,0 @@ - -void mysymbol (void) { - return; -} diff --git a/libdbusmenu-gtk/test.h b/libdbusmenu-gtk/test.h deleted file mode 100644 index ad000af..0000000 --- a/libdbusmenu-gtk/test.h +++ /dev/null @@ -1,2 +0,0 @@ - -void mysymbol (void); -- cgit v1.2.3 From f9ea57e39f9025dc93642fe306fd36c9ee61b28e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 19 May 2009 05:11:04 +0200 Subject: Getting the libs into the gtk library --- libdbusmenu-gtk/Makefile.am | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/Makefile.am b/libdbusmenu-gtk/Makefile.am index 364da62..e73c8c1 100644 --- a/libdbusmenu-gtk/Makefile.am +++ b/libdbusmenu-gtk/Makefile.am @@ -19,10 +19,11 @@ libdbusmenu_gtk_la_LDFLAGS = \ -export-symbols-regex "^[^_].*" libdbusmenu_gtk_la_CFLAGS = \ - $(LIBDBUSMENU_GTK_CFLAGS) + $(DBUSMENUGTK_CFLAGS) libdbusmenu_gtk_la_LIBADD = \ - $(LIBDBUSMENU_GTK_LIBS) + ../libdbusmenu-glib/libdbusmenu-glib.la \ + $(DBUSMENUGTK_LIBS) pkgconfig_DATA = dbusmenu-gtk.pc pkgconfigdir = $(libdir)/pkgconfig -- cgit v1.2.3 From e0a30604a2d4b4ecbdd968f91971030a41066323 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 19 May 2009 05:11:37 +0200 Subject: Include the header too --- libdbusmenu-gtk/menu.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 3e0a006..420414a 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -4,6 +4,8 @@ #include +#include "menu.h" + typedef struct _MenuPrivate MenuPrivate; struct _MenuPrivate -- cgit v1.2.3 From 3cd0f472e1e79d185681b87dced59559de9df4ff Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 20 May 2009 11:31:54 +0200 Subject: Cleaning up the name space and making it clear where we are. Now we have an object --- libdbusmenu-gtk/menu.c | 46 +++++++++++++++++++++++++++------------------- libdbusmenu-gtk/menu.h | 33 +++++++++++++++------------------ 2 files changed, 42 insertions(+), 37 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 420414a..8e4f53b 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -6,46 +6,54 @@ #include "menu.h" -typedef struct _MenuPrivate MenuPrivate; +typedef struct _DbusmenuGtkMenuPrivate DbusmenuGtkMenuPrivate; -struct _MenuPrivate +struct _DbusmenuGtkMenuPrivate { }; -#define MENU_GET_PRIVATE(o) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((o), MENU_TYPE, MenuPrivate)) +#define DBUSMENU_GTKMENU_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_GTKMENU_TYPE, DbusmenuGtkMenuPrivate)) -static void menu_class_init (MenuClass *klass); -static void menu_init (Menu *self); -static void menu_dispose (GObject *object); -static void menu_finalize (GObject *object); +static void dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass); +static void dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self); +static void dbusmenu_gtkmenu_dispose (GObject *object); +static void dbusmenu_gtkmenu_finalize (GObject *object); -G_DEFINE_TYPE (Menu, menu, GTK_TYPE_MENU); +G_DEFINE_TYPE (DbusmenuGtkMenu, dbusmenu_gtkmenu, GTK_TYPE_MENU); static void -menu_class_init (MenuClass *klass) +dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass) { -GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); -g_type_class_add_private (klass, sizeof (MenuPrivate)); + g_type_class_add_private (klass, sizeof (DbusmenuGtkMenuPrivate)); -object_class->dispose = menu_dispose; -object_class->finalize = menu_finalize; + object_class->dispose = dbusmenu_gtkmenu_dispose; + object_class->finalize = dbusmenu_gtkmenu_finalize; + + return; } static void -menu_init (Menu *self) +dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self) { + + return; } static void -menu_dispose (GObject *object) +dbusmenu_gtkmenu_dispose (GObject *object) { -G_OBJECT_CLASS (menu_parent_class)->dispose (object); + + G_OBJECT_CLASS (dbusmenu_gtkmenu_parent_class)->dispose (object); + return; } static void -menu_finalize (GObject *object) +dbusmenu_gtkmenu_finalize (GObject *object) { -G_OBJECT_CLASS (menu_parent_class)->finalize (object); + + G_OBJECT_CLASS (dbusmenu_gtkmenu_parent_class)->finalize (object); + return; } diff --git a/libdbusmenu-gtk/menu.h b/libdbusmenu-gtk/menu.h index 783737a..6d9c6ff 100644 --- a/libdbusmenu-gtk/menu.h +++ b/libdbusmenu-gtk/menu.h @@ -1,32 +1,29 @@ -#ifndef __MENU_H__ -#define __MENU_H__ +#ifndef __DBUSMENU_GTKMENU_H__ +#define __DBUSMENU_GTKMENU_H__ #include #include G_BEGIN_DECLS -#define MENU_TYPE (menu_get_type ()) -#define MENU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MENU_TYPE, Menu)) -#define MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MENU_TYPE, MenuClass)) -#define IS_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MENU_TYPE)) -#define IS_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MENU_TYPE)) -#define MENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MENU_TYPE, MenuClass)) +#define DBUSMENU_GTKMENU_TYPE (dbusmenu_gtkmenu_get_type ()) +#define DBUSMENU_GTKMENU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DBUSMENU_GTKMENU_TYPE, DbusmenuGtkMenu)) +#define DBUSMENU_GTKMENU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DBUSMENU_GTKMENU_TYPE, DbusmenuGtkMenuClass)) +#define DBUSMENU_IS_GTKMENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DBUSMENU_GTKMENU_TYPE)) +#define DBUSMENU_IS_GTKMENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DBUSMENU_GTKMENU_TYPE)) +#define DBUSMENU_GTKMENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DBUSMENU_GTKMENU_TYPE, DbusmenuGtkMenuClass)) -typedef struct _Menu Menu; -typedef struct _MenuClass MenuClass; - -struct _MenuClass -{ -GtkMenuClass parent_class; +typedef struct _DbusmenuGtkMenuClass DbusmenuGtkMenuClass; +struct _DbusmenuGtkMenuClass { + GtkMenuClass parent_class; }; -struct _Menu -{ -GtkMenu parent; +typedef struct _DbusmenuGtkMenu DbusmenuGtkMenu; +struct _DbusmenuGtkMenu { + GtkMenu parent; }; -GType menu_get_type (void); +GType dbusmenu_gtkmenu_get_type (void); G_END_DECLS -- cgit v1.2.3 From 63544bc682361f1cd022d53032c2d1d92476cc31 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 20 May 2009 11:58:28 +0200 Subject: Building up a client, but that required a couple of properties. Bigger commit than I'd like. --- libdbusmenu-gtk/menu.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 8e4f53b..a049b62 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -5,21 +5,38 @@ #include #include "menu.h" +#include "libdbusmenu-glib/client.h" +/* Properties */ +enum { + PROP_0, + PROP_DBUSOBJECT, + PROP_DBUSNAME +}; + +/* Private */ typedef struct _DbusmenuGtkMenuPrivate DbusmenuGtkMenuPrivate; +struct _DbusmenuGtkMenuPrivate { + DbusmenuClient * client; -struct _DbusmenuGtkMenuPrivate -{ + gchar * dbus_object; + gchar * dbus_name; }; #define DBUSMENU_GTKMENU_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_GTKMENU_TYPE, DbusmenuGtkMenuPrivate)) +/* Prototypes */ static void dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass); static void dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self); static void dbusmenu_gtkmenu_dispose (GObject *object); static void dbusmenu_gtkmenu_finalize (GObject *object); +static void set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec); +static void get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec); +/* Internal */ +static void build_client (DbusmenuGtkMenu * self); +/* GObject Stuff */ G_DEFINE_TYPE (DbusmenuGtkMenu, dbusmenu_gtkmenu, GTK_TYPE_MENU); static void @@ -31,6 +48,19 @@ dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass) object_class->dispose = dbusmenu_gtkmenu_dispose; object_class->finalize = dbusmenu_gtkmenu_finalize; + object_class->set_property = set_property; + object_class->get_property = get_property; + + g_object_class_install_property (object_class, PROP_DBUSOBJECT, + g_param_spec_string(DBUSMENU_CLIENT_PROP_DBUS_OBJECT, "DBus Object we represent", + "The Object on the client that we're getting our data from.", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_DBUSNAME, + g_param_spec_string(DBUSMENU_CLIENT_PROP_DBUS_NAME, "DBus Client we connect to", + "Name of the DBus client we're connecting to.", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); return; } @@ -38,6 +68,12 @@ dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass) static void dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self) { + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(self); + + priv->client = NULL; + + priv->dbus_object = NULL; + priv->dbus_name = NULL; return; } @@ -45,6 +81,12 @@ dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self) static void dbusmenu_gtkmenu_dispose (GObject *object) { + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(object); + + if (priv->client != NULL) { + g_object_unref(G_OBJECT(priv->client)); + priv->client = NULL; + } G_OBJECT_CLASS (dbusmenu_gtkmenu_parent_class)->dispose (object); return; @@ -53,7 +95,75 @@ dbusmenu_gtkmenu_dispose (GObject *object) static void dbusmenu_gtkmenu_finalize (GObject *object) { + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(object); + + g_free(priv->dbus_object); + priv->dbus_object = NULL; + + g_free(priv->dbus_name); + priv->dbus_name = NULL; G_OBJECT_CLASS (dbusmenu_gtkmenu_parent_class)->finalize (object); return; } + +static void +set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec) +{ + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(obj); + + switch (id) { + case PROP_DBUSNAME: + priv->dbus_name = g_value_dup_string(value); + if (priv->dbus_name != NULL && priv->dbus_object != NULL) { + build_client(DBUSMENU_GTKMENU(obj)); + } + break; + case PROP_DBUSOBJECT: + priv->dbus_object = g_value_dup_string(value); + if (priv->dbus_name != NULL && priv->dbus_object != NULL) { + build_client(DBUSMENU_GTKMENU(obj)); + } + break; + default: + g_warning("Unknown property %d.", id); + return; + } + + return; +} + +static void +get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) +{ + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(obj); + + switch (id) { + case PROP_DBUSNAME: + g_value_set_string(value, priv->dbus_name); + break; + case PROP_DBUSOBJECT: + g_value_set_string(value, priv->dbus_object); + break; + default: + g_warning("Unknown property %d.", id); + return; + } + + return; +} + +/* Internal Functions */ + +static void +build_client (DbusmenuGtkMenu * self) +{ + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(self); + + if (priv->client == NULL) { + priv->client = dbusmenu_client_new(priv->dbus_name, priv->dbus_object); + } + + return; +} + -- cgit v1.2.3 From 1df52c61f44b049b9e023a139a558b9e835ad5f7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 20 May 2009 12:11:32 +0200 Subject: A new function. Literally. --- libdbusmenu-gtk/menu.c | 21 +++++++++++++++++++++ libdbusmenu-gtk/menu.h | 1 + 2 files changed, 22 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index a049b62..773d57a 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -167,3 +167,24 @@ build_client (DbusmenuGtkMenu * self) return; } +/* Public API */ + +/** + dbusmenu_gtkmenu_new: + @dbus_name: Name of the #DbusmenuServer on DBus + @dbus_name: Name of the object on the #DbusmenuServer + + Creates a new #DbusmenuGtkMenu object and creates a #DbusmenuClient + that connects across DBus to a #DbusmenuServer. + + Return value: A new #DbusmenuGtkMenu sync'd with a server +*/ +DbusmenuGtkMenu * +dbusmenu_gtkmenu_new (gchar * dbus_name, gchar * dbus_object) +{ + return g_object_new(DBUSMENU_GTKMENU_TYPE, + DBUSMENU_CLIENT_PROP_DBUS_OBJECT, dbus_object, + DBUSMENU_CLIENT_PROP_DBUS_NAME, dbus_name, + NULL); +} + diff --git a/libdbusmenu-gtk/menu.h b/libdbusmenu-gtk/menu.h index 6d9c6ff..96dcca2 100644 --- a/libdbusmenu-gtk/menu.h +++ b/libdbusmenu-gtk/menu.h @@ -24,6 +24,7 @@ struct _DbusmenuGtkMenu { }; GType dbusmenu_gtkmenu_get_type (void); +DbusmenuGtkMenu * dbusmenu_gtkmenu_new (gchar * dbus_name, gchar * dbus_object); G_END_DECLS -- cgit v1.2.3 From 039c05e5e8961e1eac265a7a073526a2257d6665 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 20 May 2009 12:17:25 +0200 Subject: Comments on the structures along with some reserved entries. --- libdbusmenu-gtk/menu.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.h b/libdbusmenu-gtk/menu.h index 96dcca2..34def17 100644 --- a/libdbusmenu-gtk/menu.h +++ b/libdbusmenu-gtk/menu.h @@ -13,11 +13,29 @@ G_BEGIN_DECLS #define DBUSMENU_IS_GTKMENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DBUSMENU_GTKMENU_TYPE)) #define DBUSMENU_GTKMENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DBUSMENU_GTKMENU_TYPE, DbusmenuGtkMenuClass)) +/** + DbusmenuGtkMenuClass: + @parent_class: #GtkMenuClass + @reserved1: Reserved for future use. + @reserved2: Reserved for future use. + @reserved3: Reserved for future use. + @reserved4: Reserved for future use. +*/ typedef struct _DbusmenuGtkMenuClass DbusmenuGtkMenuClass; struct _DbusmenuGtkMenuClass { GtkMenuClass parent_class; + + /* Reserved */ + void (*reserved1) (void); + void (*reserved2) (void); + void (*reserved3) (void); + void (*reserved4) (void); }; +/** + DbusmenuGtkMenu: + @parent: #GtkMenu +*/ typedef struct _DbusmenuGtkMenu DbusmenuGtkMenu; struct _DbusmenuGtkMenu { GtkMenu parent; -- cgit v1.2.3 From c5a17e6a710ffadb20cdd65a9f42a2a1299424a4 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 20 May 2009 12:41:18 +0200 Subject: Adding in some section documentation describing the menu item --- libdbusmenu-gtk/menu.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.h b/libdbusmenu-gtk/menu.h index 34def17..dd5bdd1 100644 --- a/libdbusmenu-gtk/menu.h +++ b/libdbusmenu-gtk/menu.h @@ -44,6 +44,31 @@ struct _DbusmenuGtkMenu { GType dbusmenu_gtkmenu_get_type (void); DbusmenuGtkMenu * dbusmenu_gtkmenu_new (gchar * dbus_name, gchar * dbus_object); +/** + SECTION:gtkmenu + @short_description: A GTK Menu Object that syncronizes over DBus + @stability: Unstable + @include: libdbusmenu-gtk/menu.h + + In general, this is just a #GtkMenu, why else would you care? Oh, + because this menu is created by someone else on a server that exists + on the other side of DBus. You need a #DbusmenuServer to be able + push the data into this menu. + + The first thing you need to know is how to find that #DbusmenuServer + on DBus. This involves both the DBus name and the DBus object that + the menu interface can be found on. Those two value should be set + when creating the object using dbusmenu_gtkmenu_new(). They are then + stored on two properties #DbusmenuGtkMenu:dbus-name and #DbusmenuGtkMenu:dbus-object. + + After creation the #DbusmenuGtkMenu it will continue to keep in + synchronization with the #DbusmenuServer object across Dbus. If the + number of entries change, the menus change, if they change thier + properties change, they update in the items. All of this should + be handled transparently to the user of this object. + + TODO: Document properties. +*/ G_END_DECLS #endif -- cgit v1.2.3 From 43b314cee39228e8d4c46fe3705f8cb927474977 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 May 2009 11:07:59 +0200 Subject: Adding a connection in for processing layout changes --- libdbusmenu-gtk/menu.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 773d57a..52ebd1a 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -155,6 +155,19 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) /* Internal Functions */ +/* Processing the layout being updated and handling + that and making it into a menu */ +void +process_layout_change (DbusmenuClient * client, DbusmenuGtkMenu * gtkmenu) +{ + + + return; +} + + +/* Builds the client and connects all of the signals + up for it so that it's happy-happy */ static void build_client (DbusmenuGtkMenu * self) { @@ -162,6 +175,10 @@ build_client (DbusmenuGtkMenu * self) if (priv->client == NULL) { priv->client = dbusmenu_client_new(priv->dbus_name, priv->dbus_object); + + /* Register for layout changes, this should come after the + creation of the client pulls it from DBus */ + g_signal_connect(G_OBJECT(priv->client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(process_layout_change), self); } return; -- cgit v1.2.3 From 96513ce9369857b857dd74072b9316b49e6f2f9e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 24 May 2009 19:05:32 +0200 Subject: Starting the processing of changing the layout from the server --- libdbusmenu-gtk/menu.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 52ebd1a..814aaca 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -155,12 +155,87 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) /* Internal Functions */ +static const gchar * data_menuitem = "dbusmenugtk-data-gtkmenuitem"; +static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; + +static void +menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenuItem * gmi) +{ + + + +} + +static void +connect_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi) +{ + g_object_ref(gmi); + g_object_set_data_full(G_OBJECT(mi), data_menuitem, gmi, g_object_unref); + + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); + + return; +} + +static void +process_dbusmenu_menuitem (DbusmenuMenuitem * mi, GtkMenu * parentmenu) +{ + gpointer unknown_menuitem = g_object_get_data(G_OBJECT(mi), data_menuitem); + if (unknown_menuitem == NULL) { + /* Oh, a virgin DbusmenuMenuitem, let's fix that. */ + GtkWidget * menuitem = gtk_menu_item_new(); + connect_menuitem(mi, GTK_MENU_ITEM(menuitem)); + unknown_menuitem = menuitem; + gtk_menu_shell_append(GTK_MENU_SHELL(parentmenu), menuitem); + } + + GList * children = dbusmenu_menuitem_get_children(mi); + if (children == NULL) { + /* If there are no children to process we are + done and we can move along */ + return; + } + + /* Phase 0: Make a submenu if we don't have one */ + gpointer unknown_menu = g_object_get_data(G_OBJECT(mi), data_menu); + if (unknown_menu == NULL) { + GtkWidget * gtkmenu = gtk_menu_new(); + g_object_ref(gtkmenu); + g_object_set_data_full(G_OBJECT(mi), data_menu, gtkmenu, g_object_unref); + unknown_menu = gtkmenu; + gtk_menuitem_set_submenu(GTK_MENU_ITEM(unknown_menuitem), gtkmenu); + gtk_widget_show(gtkmenu); + } + + /* Phase 1: Add missing children */ + GList * child = NULL; + for (child = children; child != NULL; child = g_list_next(child)) { + + } + + /* Phase 2: Delete removed children */ + + + /* Phase 3: Profit! */ + return; +} + /* Processing the layout being updated and handling that and making it into a menu */ -void +static void process_layout_change (DbusmenuClient * client, DbusmenuGtkMenu * gtkmenu) { + DbusmenuMenuitem * root = dbusmenu_client_get_root(client); + GList * children = dbusmenu_menuitem_get_children(root); + if (children == NULL) { + return; + } + + GList * child = NULL; + for (child = children; child != NULL; child = g_list_next(child)) { + process_dbusmenu_menuitem(DBUSMENU_MENUITEM(child->data), GTK_MENU(gtkmenu)); + } return; } -- cgit v1.2.3 From bd52d2d670eb6881fda44ca1ae4e0c85c44d59fc Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 24 May 2009 19:19:35 +0200 Subject: Passing back the menuitem getting clicked on. --- libdbusmenu-gtk/menu.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 814aaca..90cf2e2 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -158,6 +158,13 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) static const gchar * data_menuitem = "dbusmenugtk-data-gtkmenuitem"; static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; +static gboolean +menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) +{ + dbusmenu_menuitem_activate(mi); + return TRUE; +} + static void menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenuItem * gmi) { @@ -173,6 +180,7 @@ connect_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi) g_object_set_data_full(G_OBJECT(mi), data_menuitem, gmi, g_object_unref); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); + g_signal_connect(G_OBJECT(gmi), "activate", G_CALLBACK(menu_pressed_cb), mi); return; } -- cgit v1.2.3 From 6c7818f652ef2f56b48e87da059593e340063047 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 24 May 2009 20:24:34 +0200 Subject: Using a weak ref to handle the deletion stuff. --- libdbusmenu-gtk/menu.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 90cf2e2..9bb23a8 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -156,7 +156,7 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) /* Internal Functions */ static const gchar * data_menuitem = "dbusmenugtk-data-gtkmenuitem"; -static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; +static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; static gboolean menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) @@ -168,9 +168,19 @@ menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) static void menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenuItem * gmi) { + if (g_strcmp0(prop, "label")) { + gtk_menu_item_set_label(gmi, value); + gtk_widget_show(GTK_WIDGET(gmi)); + } + return; +} - +static void +destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) +{ + g_object_destory(G_OBJECT(udata)); + return; } static void @@ -179,9 +189,11 @@ connect_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi) g_object_ref(gmi); g_object_set_data_full(G_OBJECT(mi), data_menuitem, gmi, g_object_unref); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); g_signal_connect(G_OBJECT(gmi), "activate", G_CALLBACK(menu_pressed_cb), mi); + g_object_weak_ref(G_OBJECT(mi), destoryed_dbusmenuitem_cb, gmi); + return; } @@ -218,11 +230,13 @@ process_dbusmenu_menuitem (DbusmenuMenuitem * mi, GtkMenu * parentmenu) /* Phase 1: Add missing children */ GList * child = NULL; for (child = children; child != NULL; child = g_list_next(child)) { - + process_dbusmenu_menuitem(DBUSMENU_MENUITEM(child->data), GTK_MENU(unknown_menu)); } /* Phase 2: Delete removed children */ - + /* Actually, we don't need to do this because of the weak + reference that we've added above. When the DbusmenuMenuitem + gets destroyed it takes its GtkMenuItem with it. Bye bye. */ /* Phase 3: Profit! */ return; -- cgit v1.2.3 From a3e5b5d4e8b5f0919039a94d9e05b484dc8b0c67 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 24 May 2009 21:28:21 +0200 Subject: Switching to a unref and no ref for the tracking of GTK Menu Item. Also add better warnings. --- libdbusmenu-gtk/Makefile.am | 2 +- libdbusmenu-gtk/menu.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/Makefile.am b/libdbusmenu-gtk/Makefile.am index e73c8c1..80e6058 100644 --- a/libdbusmenu-gtk/Makefile.am +++ b/libdbusmenu-gtk/Makefile.am @@ -19,7 +19,7 @@ libdbusmenu_gtk_la_LDFLAGS = \ -export-symbols-regex "^[^_].*" libdbusmenu_gtk_la_CFLAGS = \ - $(DBUSMENUGTK_CFLAGS) + $(DBUSMENUGTK_CFLAGS) -Wall -Werror libdbusmenu_gtk_la_LIBADD = \ ../libdbusmenu-glib/libdbusmenu-glib.la \ diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 9bb23a8..26543be 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -179,14 +179,13 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenu static void destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) { - g_object_destory(G_OBJECT(udata)); + g_object_unref(G_OBJECT(udata)); return; } static void connect_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi) { - g_object_ref(gmi); g_object_set_data_full(G_OBJECT(mi), data_menuitem, gmi, g_object_unref); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); @@ -223,7 +222,7 @@ process_dbusmenu_menuitem (DbusmenuMenuitem * mi, GtkMenu * parentmenu) g_object_ref(gtkmenu); g_object_set_data_full(G_OBJECT(mi), data_menu, gtkmenu, g_object_unref); unknown_menu = gtkmenu; - gtk_menuitem_set_submenu(GTK_MENU_ITEM(unknown_menuitem), gtkmenu); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(unknown_menuitem), gtkmenu); gtk_widget_show(gtkmenu); } -- cgit v1.2.3 From 1f574297a0c846edb0cf84107de4b13247f28036 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 25 May 2009 14:26:05 +0200 Subject: Bother, truth is so fickle in that it is so binary in wanting correctness. --- libdbusmenu-gtk/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 26543be..3919314 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -168,7 +168,7 @@ menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) static void menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenuItem * gmi) { - if (g_strcmp0(prop, "label")) { + if (!g_strcmp0(prop, "label")) { gtk_menu_item_set_label(gmi, value); gtk_widget_show(GTK_WIDGET(gmi)); } -- cgit v1.2.3 From 3b4051390bfb7e150f552da448e00dece4fbdf2f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 25 May 2009 17:17:34 +0200 Subject: Tracking destruction --- libdbusmenu-gtk/menu.c | 1 + 1 file changed, 1 insertion(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 3919314..9ad1bcf 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -179,6 +179,7 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenu static void destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) { + g_debug("DbusmenuMenuitem was destroyed"); g_object_unref(G_OBJECT(udata)); return; } -- cgit v1.2.3 From 1891e81fa2c10654d2e0707f48d510ab8543675b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 25 May 2009 23:21:28 +0200 Subject: Switching so that we're destroying the widget instead of object unref'ing the widget. --- libdbusmenu-gtk/menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index 9ad1bcf..aa8dc10 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -180,14 +180,14 @@ static void destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) { g_debug("DbusmenuMenuitem was destroyed"); - g_object_unref(G_OBJECT(udata)); + gtk_widget_destroy(GTK_WIDGET(udata)); return; } static void connect_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi) { - g_object_set_data_full(G_OBJECT(mi), data_menuitem, gmi, g_object_unref); + g_object_set_data(G_OBJECT(mi), data_menuitem, gmi); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); g_signal_connect(G_OBJECT(gmi), "activate", G_CALLBACK(menu_pressed_cb), mi); -- cgit v1.2.3 From 30a97d87f44f64c5a533b244b7e77bb01787ea53 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 25 May 2009 23:21:54 +0200 Subject: Debug fix --- libdbusmenu-gtk/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index aa8dc10..dd2df37 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -179,7 +179,7 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenu static void destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) { - g_debug("DbusmenuMenuitem was destroyed"); + /* g_debug("DbusmenuMenuitem was destroyed"); */ gtk_widget_destroy(GTK_WIDGET(udata)); return; } -- cgit v1.2.3 From 757ec5c8852ca964f25326e96c66c0e44c8614b8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 5 Jun 2009 15:59:00 -0500 Subject: Getting distcheck to pass by getting the header files from the -glib branch of things. --- libdbusmenu-gtk/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/Makefile.am b/libdbusmenu-gtk/Makefile.am index 80e6058..831719c 100644 --- a/libdbusmenu-gtk/Makefile.am +++ b/libdbusmenu-gtk/Makefile.am @@ -19,7 +19,7 @@ libdbusmenu_gtk_la_LDFLAGS = \ -export-symbols-regex "^[^_].*" libdbusmenu_gtk_la_CFLAGS = \ - $(DBUSMENUGTK_CFLAGS) -Wall -Werror + $(DBUSMENUGTK_CFLAGS) -I$(srcdir)/.. -Wall -Werror libdbusmenu_gtk_la_LIBADD = \ ../libdbusmenu-glib/libdbusmenu-glib.la \ -- cgit v1.2.3