Updating branch refs/heads/andrzejr/tmp3 to f84d012dc997211a43236325bca50dc7092ec3e3 (commit) from d59fbfc202bd55d0821037b250e89cb31100457e (commit)
commit f84d012dc997211a43236325bca50dc7092ec3e3 Author: Andrzej <ndrwr...@gmail.com> Date: Sat Mar 31 21:57:43 2012 +0900 Making the plugin a library and a subclass of XfcePanelPlugin The plugin is now installed as a library and to a different directory (following convention of other plugins). The plugin is now an object of IndicatorPlugin class, which extends XfcePanelPlugin. This is for making definition of properties and integration with xfconf easier. Conflicts: panel-plugin/indicator.c configure.in.in | 7 + panel-plugin/Makefile.am | 55 ++++--- panel-plugin/indicator.c | 165 ++++++++++++-------- ...ndicator.desktop.in.in => indicator.desktop.in} | 4 +- panel-plugin/indicator.h | 32 ++-- 5 files changed, 158 insertions(+), 105 deletions(-) diff --git a/configure.in.in b/configure.in.in index 3280c7f..b308dbd 100644 --- a/configure.in.in +++ b/configure.in.in @@ -30,6 +30,7 @@ dnl *************************** AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar]) AM_CONFIG_HEADER([config.h]) AM_MAINTAINER_MODE() +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) dnl ******************************** dnl *** Check for basic programs *** @@ -40,6 +41,12 @@ AC_PROG_INSTALL() AC_PROG_LIBTOOL() AC_PROG_INTLTOOL() +dnl ************************** +dnl *** Initialize libtool *** +dnl ************************** +LT_PREREQ([2.2.6]) +LT_INIT([disable-static]) + dnl ********************************** dnl *** Check for standard headers *** dnl ********************************** diff --git a/panel-plugin/Makefile.am b/panel-plugin/Makefile.am index c07a45c..0010923 100644 --- a/panel-plugin/Makefile.am +++ b/panel-plugin/Makefile.am @@ -1,19 +1,24 @@ + INCLUDES = \ -I$(top_srcdir) \ - -DG_LOG_DOMAIN=\"xfce4-indicator-plugin\" \ + -DG_LOG_DOMAIN=\"libindicator-plugin\" \ -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \ $(PLATFORM_CPPFLAGS) # # Indicator plugin # -plugin_PROGRAMS = \ - xfce4-indicator-plugin +plugindir = \ + $(libdir)/xfce4/panel/plugins + +plugin_LTLIBRARIES = \ + libindicator-plugin.la -plugindir = \ - $(libexecdir)/xfce4/panel-plugins +libindicator_built_sources = \ + indicator-dialog_ui.h -xfce4_indicator_plugin_SOURCES = \ +libindicator_plugin_la_SOURCES = \ + $(libindicator_built_sources) \ indicator-button.c \ indicator-button.h \ indicator-box.c \ @@ -21,7 +26,7 @@ xfce4_indicator_plugin_SOURCES = \ indicator.c \ indicator.h -xfce4_indicator_plugin_CFLAGS = \ +libindicator_plugin_la_CFLAGS = \ $(GTK_CFLAGS) \ $(EXO_CFLAGS) \ $(LIBXFCE4UTIL_CFLAGS) \ @@ -33,8 +38,14 @@ xfce4_indicator_plugin_CFLAGS = \ -DINDICATOR_ICONS_DIR=\""$(INDICATORICONSDIR)"\" \ -DINDICATOR_DIR=\""$(INDICATORDIR)"\" +libindicator_plugin_la_LDFLAGS = \ + -avoid-version \ + -module \ + -no-undefined \ + -export-symbols-regex '^xfce_panel_module_(preinit|init|construct)' \ + $(PLATFORM_LDFLAGS) -xfce4_indicator_plugin_LDADD = \ +libindicator_plugin_la_LIBADD = \ $(GTK_LIBS) \ $(EXO_LIBS) \ $(LIBXFCE4UTIL_LIBS) \ @@ -46,16 +57,10 @@ xfce4_indicator_plugin_LDADD = \ # Desktop file # desktopdir = \ - $(datadir)/xfce4/panel-plugins - -desktop_in_in_files = \ - indicator.desktop.in.in - -desktop_in_files = \ - $(desktop_in_in_files:.desktop.in.in=.desktop.in) + $(datadir)/xfce4/panel/plugins -%.desktop.in: %.desktop.in.in - sed -e "s,\@libexecdir\@,$(libexecdir),g" < $< > $@ +desktop_in_files = \ + indicator.desktop.in desktop_DATA = \ $(desktop_in_files:.desktop.in=.desktop) @@ -63,10 +68,20 @@ desktop_DATA = \ @INTLTOOL_DESKTOP_RULE@ EXTRA_DIST = \ - $(desktop_in_in_files) + $(desktop_in_files) -CLEANFILES = \ - $(desktop_in_files) \ +DISTCLEANFILES = \ $(desktop_DATA) +if MAINTAINER_MODE +BUILT_SOURCES = \ + $(libindicator_plugin_built_sources) + +DISTCLEANFILES += \ + $(libindicator_plugin_built_sources) + +indicator-dialog_ui.h: indicator-dialog.glade + $(AM_V_GEN) exo-csource --static --strip-comments --strip-content --name=indicator_dialog_ui $< >$@ +endif + # vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff --git a/panel-plugin/indicator.c b/panel-plugin/indicator.c index e1047cc..ff1bd29 100644 --- a/panel-plugin/indicator.c +++ b/panel-plugin/indicator.c @@ -41,26 +41,46 @@ #endif /* prototypes */ -static void -indicator_construct (XfcePanelPlugin *plugin); - -static gboolean -load_module (const gchar * name, IndicatorPlugin * indicator); - -static gboolean -indicator_size_changed (XfcePanelPlugin *plugin, gint size, IndicatorPlugin *indicator); - +static void indicator_construct (XfcePanelPlugin *plugin); +static void indicator_free (XfcePanelPlugin *plugin); +static gboolean load_module (const gchar *name, + IndicatorPlugin *indicator); +static gboolean indicator_size_changed (XfcePanelPlugin *plugin, + gint size); #ifdef HAS_PANEL_49 -static void -indicator_mode_changed (XfcePanelPlugin *plugin, XfcePanelPluginMode mode, IndicatorPlugin *indicator); +static void indicator_mode_changed (XfcePanelPlugin *plugin, + XfcePanelPluginMode mode); #else -static void -indicator_orientation_changed (XfcePanelPlugin *plugin, GtkOrientation orientation, IndicatorPlugin *indicator); +static void indicator_orientation_changed (XfcePanelPlugin *plugin, + GtkOrientation orientation); #endif -/* register the plugin */ -XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (indicator_construct); +struct _IndicatorPluginClass +{ + XfcePanelPluginClass __parent__; +}; + +/* plugin structure */ +struct _IndicatorPlugin +{ + XfcePanelPlugin __parent__; + + /* panel widgets */ + GtkWidget *item; + GtkWidget *buttonbox; + GtkWidget *ebox; + + /* indicator settings */ + gchar **excluded_modules; +}; + + +/* define the plugin */ +XFCE_PANEL_DEFINE_PLUGIN (IndicatorPlugin, indicator) + + + #if 0 void @@ -101,11 +121,12 @@ indicator_save (XfcePanelPlugin *plugin, static void indicator_read (IndicatorPlugin *indicator) { + XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (indicator); XfconfChannel * channel = xfconf_channel_get ("xfce4-panel"); - gchar * property = g_strconcat (xfce_panel_plugin_get_property_base(indicator->plugin),"/blacklist",NULL); + gchar * property = g_strconcat (xfce_panel_plugin_get_property_base(plugin),"/blacklist",NULL); indicator->excluded_modules = xfconf_channel_get_string_list(channel, property); g_free (property); - property = g_strconcat (xfce_panel_plugin_get_property_base(indicator->plugin),"/icon-size-max",NULL); + property = g_strconcat (xfce_panel_plugin_get_property_base(plugin),"/icon-size-max",NULL); xfconf_g_property_bind (channel, property, G_TYPE_INT, indicator->buttonbox, "icon-size-max"); g_free (property); /* something went wrong, apply default values */ @@ -115,18 +136,41 @@ indicator_read (IndicatorPlugin *indicator) */ } -static IndicatorPlugin * -indicator_new (XfcePanelPlugin *plugin) +static void +indicator_class_init (IndicatorPluginClass *klass) { - IndicatorPlugin *indicator; - GtkOrientation orientation; - gint indicators_loaded = 0; + XfcePanelPluginClass *plugin_class; + GObjectClass *gobject_class; + + gobject_class = G_OBJECT_CLASS (klass); + //gobject_class->get_property = indicator_get_property; + //gobject_class->set_property = indicator_set_property; + + plugin_class = XFCE_PANEL_PLUGIN_CLASS (klass); + plugin_class->construct = indicator_construct; + plugin_class->free_data = indicator_free; + plugin_class->size_changed = indicator_size_changed; + //plugin_class->configure_plugin = indicator_configure_plugin; +#ifdef HAS_PANEL_49 + plugin_class->mode_changed = indicator_mode_changed; +#else + plugin_class->orientation_changed = indicator_orientation_changed; +#endif +} - /* allocate memory for the plugin structure */ - indicator = panel_slice_new0 (IndicatorPlugin); - /* pointer to plugin */ - indicator->plugin = plugin; + +static void +indicator_init (IndicatorPlugin *indicator) +{ + XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (indicator); + GtkRcStyle *style; + + /* setup transation domain */ + xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); + + GtkOrientation orientation; + gint indicators_loaded = 0; /* get the current orientation */ orientation = xfce_panel_plugin_get_orientation (plugin); @@ -135,8 +179,9 @@ indicator_new (XfcePanelPlugin *plugin) gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), INDICATOR_ICONS_DIR); /*gtk_widget_set_name(GTK_WIDGET (indicator->plugin), "indicator-plugin");*/ - - indicator->buttonbox = xfce_indicator_box_new ();; + + indicator->buttonbox = xfce_indicator_box_new (); + /* initialize xfconf */ if (xfconf_init(NULL)){ /* get the list of excluded modules */ @@ -149,7 +194,7 @@ indicator_new (XfcePanelPlugin *plugin) const gchar * name; guint i, length; gboolean match = FALSE; - + length = (indicator->excluded_modules != NULL) ? g_strv_length (indicator->excluded_modules) : 0; while ((name = g_dir_read_name(dir)) != NULL) { for (i = 0; i < length; ++i) { @@ -174,7 +219,7 @@ indicator_new (XfcePanelPlugin *plugin) xfce_indicator_button_set_label(XFCE_INDICATOR_BUTTON(indicator->item), GTK_LABEL (gtk_label_new(_("No Indicators")))); gtk_container_add (GTK_CONTAINER (plugin), indicator->item); - gtk_widget_show(indicator->item); + gtk_widget_show(indicator->item); /* show the panel's right-click menu on this menu */ xfce_panel_plugin_add_action_widget (plugin, indicator->item); } else { @@ -187,15 +232,14 @@ indicator_new (XfcePanelPlugin *plugin) /* show the panel's right-click menu on this menu */ xfce_panel_plugin_add_action_widget (plugin, indicator->ebox); } - return indicator; } static void -indicator_free (XfcePanelPlugin *plugin, - IndicatorPlugin *indicator) +indicator_free (XfcePanelPlugin *plugin) { + IndicatorPlugin *indicator = XFCE_INDICATOR_PLUGIN (plugin); GtkWidget *dialog; /* check if the dialog is still open. if so, destroy it */ @@ -203,8 +247,6 @@ indicator_free (XfcePanelPlugin *plugin, if (G_UNLIKELY (dialog != NULL)) gtk_widget_destroy (dialog); xfconf_shutdown(); - /* free the plugin structure */ - panel_slice_free (IndicatorPlugin, indicator); } @@ -212,18 +254,18 @@ indicator_free (XfcePanelPlugin *plugin, #ifdef HAS_PANEL_49 static void indicator_mode_changed (XfcePanelPlugin *plugin, - XfcePanelPluginMode mode, - IndicatorPlugin *indicator) + XfcePanelPluginMode mode) { - GtkOrientation orientation; - GtkOrientation panel_orientation = xfce_panel_plugin_get_orientation (plugin); + GtkOrientation orientation; + GtkOrientation panel_orientation = xfce_panel_plugin_get_orientation (plugin); + IndicatorPlugin *indicator = XFCE_INDICATOR_PLUGIN (plugin); orientation = (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL) ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL; xfce_indicator_box_set_orientation (XFCE_INDICATOR_BOX (indicator->buttonbox), panel_orientation, orientation); - indicator_size_changed (plugin, xfce_panel_plugin_get_size (plugin), indicator); + indicator_size_changed (plugin, xfce_panel_plugin_get_size (plugin)); } @@ -231,21 +273,23 @@ indicator_mode_changed (XfcePanelPlugin *plugin, #else static void indicator_orientation_changed (XfcePanelPlugin *plugin, - GtkOrientation orientation, - IndicatorPlugin *indicator) + GtkOrientation orientation) { + IndicatorPlugin *indicator = XFCE_INDICATOR_PLUGIN (plugin); + xfce_indicator_box_set_orientation (XFCE_INDICATOR_BOX (indicator->buttonbox), orientation, GTK_ORIENTATION_HORIZONTAL); - indicator_size_changed (plugin, xfce_panel_plugin_get_size (plugin), indicator); + indicator_size_changed (plugin, xfce_panel_plugin_get_size (plugin)); } #endif static gboolean indicator_size_changed (XfcePanelPlugin *plugin, - gint size, - IndicatorPlugin *indicator) + gint size) { + IndicatorPlugin *indicator = XFCE_INDICATOR_PLUGIN (plugin); + #ifdef HAS_PANEL_49 xfce_indicator_box_set_size (XFCE_INDICATOR_BOX (indicator->buttonbox), size, xfce_panel_plugin_get_nrows (plugin)); @@ -262,6 +306,8 @@ indicator_size_changed (XfcePanelPlugin *plugin, static gboolean on_button_press (GtkWidget *widget, GdkEventButton *event, IndicatorPlugin *indicator) { + XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (indicator); + if (indicator != NULL) { if( event->button == 1) /* left click only */ @@ -269,7 +315,7 @@ on_button_press (GtkWidget *widget, GdkEventButton *event, IndicatorPlugin *indi gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),TRUE); gtk_menu_popup (xfce_indicator_button_get_menu (XFCE_INDICATOR_BUTTON(widget)), NULL, NULL, xfce_panel_plugin_position_menu, - indicator->plugin, 1, gtk_get_current_event_time ()); + plugin, 1, gtk_get_current_event_time ()); return TRUE; } @@ -289,28 +335,9 @@ menu_deactivate (GtkMenu *menu, static void indicator_construct (XfcePanelPlugin *plugin) { - IndicatorPlugin *indicator; - - /* setup transation domain */ - xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); + IndicatorPlugin *indicator = XFCE_INDICATOR_PLUGIN (plugin); - /* create the plugin */ - indicator = indicator_new (plugin); - - /* connect plugin signals */ - g_signal_connect (G_OBJECT (plugin), "free-data", - G_CALLBACK (indicator_free), indicator); - - g_signal_connect (G_OBJECT (plugin), "size-changed", - G_CALLBACK (indicator_size_changed), indicator); - -#ifdef HAS_PANEL_49 - g_signal_connect (G_OBJECT (plugin), "mode-changed", - G_CALLBACK (indicator_mode_changed), indicator); -#else - g_signal_connect (G_OBJECT (plugin), "orientation-changed", - G_CALLBACK (indicator_orientation_changed), indicator); -#endif + //consider moving some stuff from indicator_init() here } @@ -332,7 +359,7 @@ entry_scrolled (GtkWidget *menuitem, GdkEventScroll *event, IndicatorPlugin *ind static void entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data) { - XfcePanelPlugin *plugin = ((IndicatorPlugin *) user_data)->plugin; + XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (user_data); GtkWidget * button = xfce_indicator_button_new (io, entry); gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); gtk_button_set_use_underline(GTK_BUTTON (button),TRUE); @@ -355,7 +382,7 @@ entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_d g_signal_connect(button, "scroll-event", G_CALLBACK(entry_scrolled), user_data); - gtk_container_add(GTK_CONTAINER (((IndicatorPlugin *)user_data)->buttonbox), button); + gtk_container_add(GTK_CONTAINER (XFCE_INDICATOR_PLUGIN (user_data)->buttonbox), button); gtk_widget_show(button); } diff --git a/panel-plugin/indicator.desktop.in.in b/panel-plugin/indicator.desktop.in similarity index 67% rename from panel-plugin/indicator.desktop.in.in rename to panel-plugin/indicator.desktop.in index 3f686cd..b0a757d 100644 --- a/panel-plugin/indicator.desktop.in.in +++ b/panel-plugin/indicator.desktop.in @@ -4,5 +4,5 @@ Encoding=UTF-8 _Name=Indicator Plugin _Comment=An indicator of something that needs your attention on the desktop Icon=xfce4-indicator-plugin -X-XFCE-Exec=@libexecdir@/xfce4/panel-plugins/xfce4-indicator-plugin -#X-XFCE-Unique=true +X-XFCE-Module=indicator-plugin +X-XFCE-Internal=FALSE diff --git a/panel-plugin/indicator.h b/panel-plugin/indicator.h index 8b3393c..b59c963 100644 --- a/panel-plugin/indicator.h +++ b/panel-plugin/indicator.h @@ -18,24 +18,28 @@ #ifndef __INDICATOR_H__ #define __INDICATOR_H__ +#include <glib.h> +#include <gtk/gtk.h> +#include <libxfce4panel/libxfce4panel.h> + G_BEGIN_DECLS +typedef struct _IndicatorPluginClass IndicatorPluginClass; +typedef struct _IndicatorPlugin IndicatorPlugin; + +#define XFCE_TYPE_INDICATOR_PLUGIN (indicator_get_type ()) +#define XFCE_INDICATOR_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFCE_TYPE_INDICATOR_PLUGIN, IndicatorPlugin)) +#define XFCE_INDICATOR_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XFCE_TYPE_INDICATOR_PLUGIN, IndicatorPluginClass)) +#define XFCE_IS_INDICATOR_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFCE_TYPE_INDICATOR_PLUGIN)) +#define XFCE_IS_INDICATOR_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFCE_TYPE_INDICATOR_PLUGIN)) +#define XFCE_INDICATOR_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFCE_TYPE_INDICATOR_PLUGIN, IndicatorPluginClass)) + +GType indicator_get_type (void) G_GNUC_CONST; + +void indicator_register_type (XfcePanelTypeModule *type_module); + #ifndef INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED #define INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED "scroll-entry" #endif -/* plugin structure */ -typedef struct -{ - XfcePanelPlugin *plugin; - - /* panel widgets */ - GtkWidget *item; - GtkWidget *buttonbox; - GtkWidget *ebox; - - /* indicator settings */ - gchar **excluded_modules; -} -IndicatorPlugin; void indicator_save (XfcePanelPlugin *plugin, _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits