[gnome-applets] [stickynotes] Port to new libpanel-applet API



commit be46000adf50329e93e7d04866024894730cb097
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Thu Feb 25 14:02:45 2010 +0100

    [stickynotes] Port to new libpanel-applet API

 stickynotes/GNOME_StickyNotesApplet.server.in.in   |   26 ------
 stickynotes/GNOME_StickyNotesApplet.xml            |   15 ----
 stickynotes/Makefile.am                            |   38 ++++++---
 ...me.applets.StickyNotesApplet.panel-applet.in.in |   16 ++++
 ...anel.applet.StickyNotesAppletFactory.service.in |    3 +
 stickynotes/stickynotes-applet-menu.xml            |   10 ++
 stickynotes/stickynotes_applet.c                   |   88 +++++++++++++------
 stickynotes/stickynotes_applet.h                   |    4 +-
 stickynotes/stickynotes_applet_callbacks.c         |   24 +++--
 stickynotes/stickynotes_applet_callbacks.h         |   16 ++--
 10 files changed, 139 insertions(+), 101 deletions(-)
---
diff --git a/stickynotes/Makefile.am b/stickynotes/Makefile.am
index 76eee21..c279952 100644
--- a/stickynotes/Makefile.am
+++ b/stickynotes/Makefile.am
@@ -2,19 +2,20 @@
 
 SUBDIRS = pixmaps docs data
 
-ui_files = GNOME_StickyNotesApplet.xml
+ui_files = stickynotes-applet-menu.xml
 builder_files = stickynotes.ui
-server_in_files = GNOME_StickyNotesApplet.server.in
+applet_in_files = org.gnome.applets.StickyNotesApplet.panel-applet.in
+service_in_files = org.gnome.panel.applet.StickyNotesAppletFactory.service.in
 schemas_in_files = stickynotes.schemas.in
 
 if BUILD_STICKYNOTES_APPLET
 INCLUDES =					\
 	-I.					\
 	-I$(srcdir)				\
-	$(GNOME_APPLETS_CFLAGS)			\
-	$(GNOME_LIBS2_CFLAGS)			\
+	$(GNOME_APPLETS3_CFLAGS)		\
 	$(LIBWNCK_CFLAGS)			\
 	$(XML2_CFLAGS)				\
+	-DSTICKYNOTES_MENU_UI_DIR=\""$(uidir)"\"\
 	-DSTICKYNOTES_ICONDIR=\"$(datadir)/pixmaps/stickynotes/\"
 
 libexec_PROGRAMS = stickynotes_applet
@@ -32,9 +33,8 @@ stickynotes_applet_SOURCES = \
 	stickynotes_applet_callbacks.c
 
 stickynotes_applet_LDADD =	\
-	$(GNOME_APPLETS_LIBS)	\
+	$(GNOME_APPLETS3_LIBS)	\
 	$(LIBWNCK_LIBS)		\
-	$(GNOME_LIBS2_LIBS)	\
 	$(XML2_LIBS)
 
 builder_DATA = $(builder_files)
@@ -47,15 +47,26 @@ schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
 
 @INTLTOOL_SCHEMAS_RULE@
 
-serverdir       = $(libdir)/bonobo/servers
-server_DATA     = $(server_in_files:.server.in=.server)
+appletdir   = $(datadir)/gnome-panel/applets
+applet_DATA = $(applet_in_files:.panel-applet.in=.panel-applet)
 
-$(server_in_files): $(server_in_files:.server.in=.server.in.in)
-	sed -e "s|\ LIBEXECDIR\@|$(libexecdir)|" $< > $@
+$(applet_in_files): $(applet_in_files).in Makefile
+	$(AM_V_GEN)sed \
+            -e "s|\ LIBEXECDIR\@|$(libexecdir)|" \
+            -e "s|\ VERSION\@|$(PACKAGE_VERSION)|" \
+            $< > $@
 
-CLEANFILES = $(server_in_files) $(server_DATA) $(schemas_DATA)
+%.panel-applet: %.panel-applet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
 
- INTLTOOL_SERVER_RULE@
+servicedir   = $(datadir)/dbus-1/services
+service_DATA = $(service_in_files:.service.in=.service)
+
+org.gnome.panel.applet.StickyNotesAppletFactory.service: $(service_in_files)
+	$(AM_V_GEN)sed \
+            -e "s|\ LIBEXECDIR\@|$(libexecdir)|" \
+            $< > $@
+
+CLEANFILES = $(applet_DATA) $(applet_DATA).in $(service_DATA) $(schemas_DATA)
 
 if GCONF_SCHEMAS_INSTALL
 install-data-local:
@@ -68,7 +79,8 @@ EXTRA_DIST = \
 	     $(builder_files) \
 	     $(ui_files) \
 	     $(schemas_in_files) \
-	     GNOME_StickyNotesApplet.server.in.in
+             $(service_in_files) \
+	     org.gnome.applets.StickyNotesApplet.panel-applet.in.in
 
 
 -include $(top_srcdir)/git.mk
diff --git a/stickynotes/org.gnome.applets.StickyNotesApplet.panel-applet.in.in b/stickynotes/org.gnome.applets.StickyNotesApplet.panel-applet.in.in
new file mode 100644
index 0000000..8757406
--- /dev/null
+++ b/stickynotes/org.gnome.applets.StickyNotesApplet.panel-applet.in.in
@@ -0,0 +1,16 @@
+[Applet Factory]
+Id=StickyNotesAppletFactory
+Location= LIBEXECDIR@/stickynotes_applet
+_Name=Sticky Notes Applet Factory
+_Description=Sticky Notes Applet Factory
+
+[StickyNotesApplet]
+_Name=Sticky Notes
+_Description=Create, view, and manage sticky notes on the desktop
+Icon=gnome-sticky-notes-applet
+BonoboId=OAFIID:GNOME_StickyNotesApplet
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-applets
+X-GNOME-Bugzilla-Component=stickynotes
+X-GNOME-Bugzilla-Version= VERSION@
+X-GNOME-Bugzilla-OtherBinaries=stickynotes_applet
diff --git a/stickynotes/org.gnome.panel.applet.StickyNotesAppletFactory.service.in b/stickynotes/org.gnome.panel.applet.StickyNotesAppletFactory.service.in
new file mode 100644
index 0000000..9c8fa2c
--- /dev/null
+++ b/stickynotes/org.gnome.panel.applet.StickyNotesAppletFactory.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.gnome.panel.applet.StickyNotesAppletFactory
+Exec= LIBEXECDIR@/stickynotes_applet
diff --git a/stickynotes/stickynotes-applet-menu.xml b/stickynotes/stickynotes-applet-menu.xml
new file mode 100644
index 0000000..95d5659
--- /dev/null
+++ b/stickynotes/stickynotes-applet-menu.xml
@@ -0,0 +1,10 @@
+<menuitem name="new_note" action="new_note" />
+<menuitem name="hide_notes" action="hide_notes" />
+<menuitem name="lock" action="lock" />
+<menuitem name="destroy_all" action="destroy_all" />
+<separator/>
+<menuitem name="preferences" action="preferences" />
+<menuitem name="help" action="help" />
+<menuitem name="about" action="about" />
+
+
diff --git a/stickynotes/stickynotes_applet.c b/stickynotes/stickynotes_applet.c
index b653247..d7c9ddf 100644
--- a/stickynotes/stickynotes_applet.c
+++ b/stickynotes/stickynotes_applet.c
@@ -28,15 +28,33 @@
 StickyNotes *stickynotes = NULL;
 
 /* Popup menu on the applet */
-static const BonoboUIVerb stickynotes_applet_menu_verbs[] =
+static const GtkActionEntry stickynotes_applet_menu_actions[] =
 {
-        BONOBO_UI_UNSAFE_VERB ("new_note", menu_new_note_cb),
-        BONOBO_UI_UNSAFE_VERB ("hide_notes", menu_hide_notes_cb),
-        BONOBO_UI_UNSAFE_VERB ("destroy_all", menu_destroy_all_cb),
-        BONOBO_UI_UNSAFE_VERB ("preferences", menu_preferences_cb),
-        BONOBO_UI_UNSAFE_VERB ("help", menu_help_cb),
-        BONOBO_UI_UNSAFE_VERB ("about", menu_about_cb),
-        BONOBO_UI_VERB_END
+	{ "new_note", GTK_STOCK_NEW, N_("_New Note"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_new_note_cb) },
+	{ "hide_notes", NULL, N_("Hi_de Notes"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_hide_notes_cb) },
+	{ "destroy_all", GTK_STOCK_DELETE, N_("_Delete Notes"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_destroy_all_cb) },
+	{ "preferences", GTK_STOCK_PROPERTIES, N_("_Preferences"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_preferences_cb) },
+	{ "help", GTK_STOCK_HELP, N_("_Help"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_help_cb) },
+	{ "about", GTK_STOCK_ABOUT, N_("_About"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_about_cb) }
+};
+
+static const GtkToggleActionEntry stickynotes_applet_menu_toggle_actions[] =
+{
+	{ "lock", NULL, N_("_Lock Notes"),
+	  NULL, NULL,
+	  G_CALLBACK (menu_toggle_lock_cb), FALSE }
 };
 
 /* Sticky Notes Icons */
@@ -52,7 +70,7 @@ static const StickyNotesStockIcon stickynotes_icons[] =
 /* Sticky Notes applet factory */
 static gboolean stickynotes_applet_factory(PanelApplet *panel_applet, const gchar *iid, gpointer data)
 {
-	if (!strcmp(iid, "OAFIID:GNOME_StickyNotesApplet")) {
+	if (!strcmp(iid, "StickyNotesApplet")) {
 		if (!stickynotes)
 			stickynotes_applet_init (panel_applet);
 
@@ -71,8 +89,8 @@ static gboolean stickynotes_applet_factory(PanelApplet *panel_applet, const gcha
 }
 
 /* Sticky Notes applet factory */
-PANEL_APPLET_BONOBO_FACTORY("OAFIID:GNOME_StickyNotesApplet_Factory", PANEL_TYPE_APPLET, "stickynotes_applet", VERSION,
-			    stickynotes_applet_factory, NULL)
+PANEL_APPLET_OUT_PROCESS_FACTORY("StickyNotesAppletFactory", PANEL_TYPE_APPLET, "stickynotes_applet",
+				 stickynotes_applet_factory, NULL)
 
 /* colorshift a pixbuf */
 static void
@@ -340,6 +358,7 @@ void stickynotes_applet_init_prefs(void)
 StickyNotesApplet * stickynotes_applet_new(PanelApplet *panel_applet)
 {
 	AtkObject *atk_obj;
+	gchar *ui_path;
 
 	/* Create Sticky Notes Applet */
 	StickyNotesApplet *applet = g_new(StickyNotesApplet, 1);
@@ -363,24 +382,27 @@ StickyNotesApplet * stickynotes_applet_new(PanelApplet *panel_applet)
 	stickynotes_applet_update_icon(applet);
 
 	/* Add the popup menu */
-	panel_applet_setup_menu_from_file(panel_applet,
-			DATADIR, "GNOME_StickyNotesApplet.xml",
-			NULL, stickynotes_applet_menu_verbs,
-			applet);
+	applet->action_group = gtk_action_group_new ("StickyNotes Applet Actions");
+	gtk_action_group_set_translation_domain (applet->action_group, GETTEXT_PACKAGE);
+	gtk_action_group_add_actions (applet->action_group,
+				      stickynotes_applet_menu_actions,
+				      G_N_ELEMENTS (stickynotes_applet_menu_actions),
+				      applet);
+	gtk_action_group_add_toggle_actions (applet->action_group,
+					     stickynotes_applet_menu_toggle_actions,
+					     G_N_ELEMENTS (stickynotes_applet_menu_toggle_actions),
+					     applet);
+	ui_path = g_build_filename (STICKYNOTES_MENU_UI_DIR, "stickynotes-applet-menu.xml", NULL);
+	panel_applet_setup_menu_from_file(panel_applet, ui_path, applet->action_group);
+	g_free (ui_path);
 
 	if (panel_applet_get_locked_down (panel_applet)) {
-		BonoboUIComponent *popup_component;
-
-		popup_component = panel_applet_get_popup_component (panel_applet);
+		GtkAction *action;
 
-		bonobo_ui_component_set_prop (popup_component,
-					      "/commands/preferences",
-					      "hidden", "1",
-					      NULL);
+		action = gtk_action_group_get_action (applet->action_group, "preferences");
+		gtk_action_set_visible (action, FALSE);
 	}
 
-	bonobo_ui_component_add_listener(panel_applet_get_popup_component(panel_applet), "lock", (BonoboUIListenerFn) menu_toggle_lock_cb, applet);
-
 	/* Connect all signals for applet management */
 	g_signal_connect(G_OBJECT(applet->w_applet), "button-press-event",
 			G_CALLBACK(applet_button_cb), applet);
@@ -568,12 +590,22 @@ void stickynotes_applet_update_menus(void)
 
 	for (l = stickynotes->applets; l != NULL; l = l->next) {
 		StickyNotesApplet *applet = l->data;
+		GSList *proxies, *p;
+
+		GtkAction *action = gtk_action_group_get_action (applet->action_group, "lock");
 
-		BonoboUIComponent *popup = panel_applet_get_popup_component(PANEL_APPLET(applet->w_applet));
+		g_object_set (action,
+			      "active", locked,
+			      "sensitive", locked_writable,
+			      NULL);
 
-		bonobo_ui_component_set_prop(popup, "/commands/lock", "state", locked ? "1" : "0", NULL);
-		bonobo_ui_component_set_prop(popup, "/commands/lock", "inconsistent", inconsistent ? "1" : "0", NULL); /* FIXME : Doesn't work */
-		bonobo_ui_component_set_prop(popup, "/commands/lock", "sensitive", locked_writable ? "1" : "0", NULL);
+		proxies = gtk_action_get_proxies (action);
+		for (p = proxies; p; p = g_slist_next (p)) {
+			if (GTK_IS_CHECK_MENU_ITEM (p->data)) {
+				gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (p->data),
+								      inconsistent);
+			}
+		}
 	}
 }
 
diff --git a/stickynotes/stickynotes_applet.h b/stickynotes/stickynotes_applet.h
index 549e899..779491f 100644
--- a/stickynotes/stickynotes_applet.h
+++ b/stickynotes/stickynotes_applet.h
@@ -20,6 +20,7 @@
 #ifndef __STICKYNOTES_APPLET_H__
 #define __STICKYNOTES_APPLET_H__
 
+#include <glib/gi18n.h>
 #include <gdk/gdk.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gtk/gtk.h>
@@ -90,7 +91,8 @@ typedef struct
 
 	gint panel_size;
 	PanelAppletOrient panel_orient;
-	
+
+	GtkActionGroup *action_group;
 	GtkWidget *menu_tip;
 } StickyNotesApplet;
 	
diff --git a/stickynotes/stickynotes_applet_callbacks.c b/stickynotes/stickynotes_applet_callbacks.c
index 24622b2..83975d5 100644
--- a/stickynotes/stickynotes_applet_callbacks.c
+++ b/stickynotes/stickynotes_applet_callbacks.c
@@ -282,6 +282,9 @@ void applet_destroy_cb (PanelApplet *panel_applet, StickyNotesApplet *applet)
 	if (applet->destroy_all_dialog != NULL)
 		gtk_widget_destroy (applet->destroy_all_dialog);
 
+	if (applet->action_group)
+		g_object_unref (applet->action_group);
+
 	if (stickynotes->applets != NULL)
 		stickynotes->applets = g_list_remove (stickynotes->applets, applet);
 
@@ -317,19 +320,19 @@ destroy_all_response_cb (GtkDialog *dialog, gint id, StickyNotesApplet *applet)
 }
 
 /* Menu Callback : New Note */
-void menu_new_note_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname)
+void menu_new_note_cb(GtkAction *action, StickyNotesApplet *applet)
 {
 	popup_add_note (applet, NULL);
 }
 
 /* Menu Callback : Hide Notes */
-void menu_hide_notes_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname)
+void menu_hide_notes_cb(GtkAction *action, StickyNotesApplet *applet)
 {
 	stickynote_show_notes (FALSE);
 }
 
 /* Menu Callback : Destroy all sticky notes */
-void menu_destroy_all_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname)
+void menu_destroy_all_cb(GtkAction *action, StickyNotesApplet *applet)
 {
 	GtkBuilder *builder;
 
@@ -359,14 +362,16 @@ void menu_destroy_all_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, cons
 }
 
 /* Menu Callback: Lock/Unlock sticky notes */
-void menu_toggle_lock_cb(BonoboUIComponent *uic, const gchar *path, Bonobo_UIComponent_EventType type, const gchar *state, StickyNotesApplet *applet)
+void menu_toggle_lock_cb(GtkAction *action, StickyNotesApplet *applet)
 {
+	gboolean locked = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
 	if (gconf_client_key_is_writable(stickynotes->gconf, GCONF_PATH "/settings/locked", NULL))
-		gconf_client_set_bool(stickynotes->gconf, GCONF_PATH "/settings/locked", strcmp(state, "0") != 0, NULL);
+		gconf_client_set_bool(stickynotes->gconf, GCONF_PATH "/settings/locked", locked, NULL);
 }
 
 /* Menu Callback : Configure preferences */
-void menu_preferences_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname)
+void menu_preferences_cb(GtkAction *action, StickyNotesApplet *applet)
 {
 	stickynotes_applet_update_prefs();
 	gtk_window_set_screen(GTK_WINDOW(stickynotes->w_prefs), gtk_widget_get_screen(applet->w_applet));
@@ -374,7 +379,7 @@ void menu_preferences_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, cons
 }
 
 /* Menu Callback : Show help */
-void menu_help_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname)
+void menu_help_cb(GtkAction *action, StickyNotesApplet *applet)
 {
 	GError *error = NULL;
 	gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (applet->w_applet)),
@@ -394,9 +399,8 @@ void menu_help_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar
 
 /* Menu Callback : Display About window */
 void
-menu_about_cb (BonoboUIComponent *uic,
-	       StickyNotesApplet *applet,
-	       const gchar *verbname)
+menu_about_cb (GtkAction *action,
+	       StickyNotesApplet *applet)
 {
 	static const gchar *authors[] = {
 		"Loban A Rahman <loban earthling net>",
diff --git a/stickynotes/stickynotes_applet_callbacks.h b/stickynotes/stickynotes_applet_callbacks.h
index 7a907f7..75b826f 100644
--- a/stickynotes/stickynotes_applet_callbacks.h
+++ b/stickynotes/stickynotes_applet_callbacks.h
@@ -37,14 +37,14 @@ void applet_change_bg_cb (PanelApplet *panel_applet,
                      		 StickyNotesApplet *applet);
 void applet_destroy_cb (PanelApplet *panel_applet, StickyNotesApplet *applet);
 /* Callbacks for sticky notes applet menu */
-void menu_create_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
-void menu_new_note_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
-void menu_hide_notes_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
-void menu_destroy_all_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
-void menu_toggle_lock_cb(BonoboUIComponent *uic, const gchar *path, Bonobo_UIComponent_EventType type, const gchar *state, StickyNotesApplet *applet);
-void menu_preferences_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
-void menu_help_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
-void menu_about_cb(BonoboUIComponent *uic, StickyNotesApplet *applet, const gchar *verbname);
+void menu_create_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_new_note_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_hide_notes_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_destroy_all_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_toggle_lock_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_preferences_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_help_cb(GtkAction *action, StickyNotesApplet *applet);
+void menu_about_cb(GtkAction *action, StickyNotesApplet *applet);
 
 /* Callbacks for sticky notes preferences dialog */
 void preferences_save_cb(gpointer data);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]