[gnome-applets] [stickynotes] Port to new libpanel-applet API
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets] [stickynotes] Port to new libpanel-applet API
- Date: Wed, 18 Aug 2010 14:40:16 +0000 (UTC)
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]