diff options
Diffstat (limited to 'libindicator')
-rw-r--r-- | libindicator/Makefile.am | 5 | ||||
-rw-r--r-- | libindicator/Makefile.in | 11 | ||||
-rw-r--r-- | libindicator/indicator-image-helper.c | 38 | ||||
-rw-r--r-- | libindicator/indicator-object-marshal.c | 39 | ||||
-rw-r--r-- | libindicator/indicator-object-marshal.h | 8 | ||||
-rw-r--r-- | libindicator/indicator-object-marshal.list | 1 | ||||
-rw-r--r-- | libindicator/indicator-object.c | 76 | ||||
-rw-r--r-- | libindicator/indicator-object.h | 24 | ||||
-rw-r--r-- | libindicator/indicator.pc.in | 2 |
9 files changed, 166 insertions, 38 deletions
diff --git a/libindicator/Makefile.am b/libindicator/Makefile.am index 983a6a5..f942f0d 100644 --- a/libindicator/Makefile.am +++ b/libindicator/Makefile.am @@ -42,6 +42,11 @@ libindicator_la_CFLAGS = \ libindicator_la_LIBADD = \ $(LIBINDICATOR_LIBS) +libindicator_la_LDFLAGS = \ + -version-info 1:0:0 \ + -no-undefined \ + -export-symbols-regex "^[^_].*" + pkgconfig_DATA = indicator.pc pkgconfigdir = $(libdir)/pkgconfig diff --git a/libindicator/Makefile.in b/libindicator/Makefile.in index ebe7648..209f524 100644 --- a/libindicator/Makefile.in +++ b/libindicator/Makefile.in @@ -105,8 +105,8 @@ am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libindicator_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libindicator_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ + $(libindicator_la_CFLAGS) $(CFLAGS) $(libindicator_la_LDFLAGS) \ + $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -202,6 +202,8 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREFIX = @PREFIX@ RANLIB = @RANLIB@ SED = @SED@ @@ -309,6 +311,11 @@ libindicator_la_CFLAGS = \ libindicator_la_LIBADD = \ $(LIBINDICATOR_LIBS) +libindicator_la_LDFLAGS = \ + -version-info 1:0:0 \ + -no-undefined \ + -export-symbols-regex "^[^_].*" + pkgconfig_DATA = indicator.pc pkgconfigdir = $(libdir)/pkgconfig glib_marshal_list = indicator-object-marshal.list diff --git a/libindicator/indicator-image-helper.c b/libindicator/indicator-image-helper.c index 2492227..b404b8f 100644 --- a/libindicator/indicator-image-helper.c +++ b/libindicator/indicator-image-helper.c @@ -30,6 +30,9 @@ static void refresh_image (GtkImage * image) { g_return_if_fail(GTK_IS_IMAGE(image)); + const gchar * icon_filename = NULL; + GtkIconInfo * icon_info = NULL; + gint icon_size = 22; GIcon * icon_names = (GIcon *)g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA); g_return_if_fail(icon_names != NULL); @@ -38,26 +41,35 @@ refresh_image (GtkImage * image) GtkIconTheme * default_theme = gtk_icon_theme_get_default(); g_return_if_fail(default_theme != NULL); - gint icon_size = 22; - /* Look through the themes for that icon */ - GtkIconInfo * icon_info = gtk_icon_theme_lookup_by_gicon(default_theme, icon_names, icon_size, 0); + icon_info = gtk_icon_theme_lookup_by_gicon(default_theme, icon_names, icon_size, 0); if (icon_info == NULL) { - g_warning("Unable to find icon in theme."); - return; + /* Try using the second item in the names, which should be the original filename supplied */ + const gchar * const * names = g_themed_icon_get_names(G_THEMED_ICON( icon_names )); + if (names) { + icon_filename = names[1]; + } else { + g_warning("Unable to find icon\n"); + gtk_image_clear(image); + return; + } + } else { + /* Grab the filename */ + icon_filename = gtk_icon_info_get_filename(icon_info); } - - /* Grab the filename */ - const gchar * icon_filename = gtk_icon_info_get_filename(icon_info); - g_return_if_fail(icon_filename != NULL); /* An error because we shouldn't get info without a filename */ + g_return_if_fail(icon_filename != NULL); /* An error because we don't have a filename */ /* Build a pixbuf */ GError * error = NULL; GdkPixbuf * pixbuf = gdk_pixbuf_new_from_file(icon_filename, &error); - gtk_icon_info_free(icon_info); + + if (icon_info != NULL) { + gtk_icon_info_free(icon_info); + } if (pixbuf == NULL) { - g_error("Unable to load icon from file '%s' because: %s", icon_filename, error == NULL ? "I don't know" : error->message); + g_warning("Unable to load icon from file '%s' because: %s", icon_filename, error == NULL ? "I don't know" : error->message); + gtk_image_clear(image); return; } @@ -126,12 +138,14 @@ indicator_image_helper_update (GtkImage * image, const gchar * name) g_return_if_fail(name != NULL); g_return_if_fail(name[0] != '\0'); g_return_if_fail(image != NULL); + gboolean seen_previously = FALSE; /* Build us a GIcon */ GIcon * icon_names = g_themed_icon_new_with_default_fallbacks(name); + g_warn_if_fail(icon_names != NULL); g_return_if_fail(icon_names != NULL); - gboolean seen_previously = (g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA) != NULL); + seen_previously = (g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA) != NULL); /* Attach our names to the image */ g_object_set_data_full(G_OBJECT(image), INDICATOR_NAMES_DATA, icon_names, g_object_unref); diff --git a/libindicator/indicator-object-marshal.c b/libindicator/indicator-object-marshal.c index 4c36c8e..d5d526a 100644 --- a/libindicator/indicator-object-marshal.c +++ b/libindicator/indicator-object-marshal.c @@ -22,6 +22,7 @@ #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) +#define g_marshal_value_peek_variant(v) g_value_get_variant (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the @@ -45,6 +46,7 @@ #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ @@ -124,3 +126,40 @@ _indicator_object_marshal_VOID__UINT_ENUM (GClosure *closure, data2); } +/* VOID:POINTER,UINT (./indicator-object-marshal.list:3) */ +void +_indicator_object_marshal_VOID__POINTER_UINT (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef void (*GMarshalFunc_VOID__POINTER_UINT) (gpointer data1, + gpointer arg_1, + guint arg_2, + gpointer data2); + register GMarshalFunc_VOID__POINTER_UINT callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + + g_return_if_fail (n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__POINTER_UINT) (marshal_data ? marshal_data : cc->callback); + + callback (data1, + g_marshal_value_peek_pointer (param_values + 1), + g_marshal_value_peek_uint (param_values + 2), + data2); +} + diff --git a/libindicator/indicator-object-marshal.h b/libindicator/indicator-object-marshal.h index 96e98f8..c34fa94 100644 --- a/libindicator/indicator-object-marshal.h +++ b/libindicator/indicator-object-marshal.h @@ -22,6 +22,14 @@ extern void _indicator_object_marshal_VOID__UINT_ENUM (GClosure *closure, gpointer invocation_hint, gpointer marshal_data); +/* VOID:POINTER,UINT (./indicator-object-marshal.list:3) */ +extern void _indicator_object_marshal_VOID__POINTER_UINT (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + G_END_DECLS #endif /* ___indicator_object_marshal_MARSHAL_H__ */ diff --git a/libindicator/indicator-object-marshal.list b/libindicator/indicator-object-marshal.list index d9dd126..bb447bb 100644 --- a/libindicator/indicator-object-marshal.list +++ b/libindicator/indicator-object-marshal.list @@ -1,2 +1,3 @@ VOID: POINTER, UINT, UINT VOID: UINT,ENUM +VOID: POINTER, UINT diff --git a/libindicator/indicator-object.c b/libindicator/indicator-object.c index 511a407..41484a6 100644 --- a/libindicator/indicator-object.c +++ b/libindicator/indicator-object.c @@ -57,7 +57,8 @@ enum { ENTRY_ADDED, ENTRY_REMOVED, ENTRY_MOVED, - SCROLL, + SCROLL, + MENU_SHOW, LAST_SIGNAL }; @@ -145,22 +146,40 @@ indicator_object_class_init (IndicatorObjectClass *klass) G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_NONE); - /** - IndicatorObject::scroll: - @arg0: The #IndicatorObject object - @arg1: The delta of the scroll event - @arg2: The orientation of the scroll event. + /** + IndicatorObject::scroll: + @arg0: The #IndicatorObject object + @arg1: The delta of the scroll event + @arg2: The orientation of the scroll event. - When the indicator receives a mouse scroll wheel event - from the user, this signal is emitted. - */ - signals[SCROLL] = g_signal_new (INDICATOR_OBJECT_SIGNAL_SCROLL, - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (IndicatorObjectClass, scroll), - NULL, NULL, - _indicator_object_marshal_VOID__UINT_ENUM, - G_TYPE_NONE, 2, G_TYPE_UINT, INDICATOR_OBJECT_TYPE_SCROLL_DIRECTION); + When the indicator receives a mouse scroll wheel event + from the user, this signal is emitted. + */ + signals[SCROLL] = g_signal_new (INDICATOR_OBJECT_SIGNAL_SCROLL, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (IndicatorObjectClass, scroll), + NULL, NULL, + _indicator_object_marshal_VOID__UINT_ENUM, + G_TYPE_NONE, 2, G_TYPE_UINT, INDICATOR_OBJECT_TYPE_SCROLL_DIRECTION); + + /** + IndicatorObject::menu-show: + @arg0: The #IndicatorObject object + @arg1: A pointer to the #IndicatorObjectEntry that + is being shown. + @arg2: The timestamp of the event + + Used when the indicator wants to signal up the stack + that the menu should be shown. + */ + signals[MENU_SHOW] = g_signal_new (INDICATOR_OBJECT_SIGNAL_MENU_SHOW, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (IndicatorObjectClass, menu_show), + NULL, NULL, + _indicator_object_marshal_VOID__POINTER_UINT, + G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_UINT); return; @@ -413,3 +432,28 @@ indicator_object_get_location (IndicatorObject * io, IndicatorObjectEntry * entr return 0; } + +/** + indicator_object_entry_activate: + @io: #IndicatorObject to query + @entry: The #IndicatorObjectEntry whose entry was shown + @timestamp: The X11 timestamp of the event + + Used to signal to the indicator that the menu on an entry has + been clicked on. This can either be an activate or a showing + of the menu. Note, this does not actually show the menu that's + left up to the reader. +*/ +void +indicator_object_entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp) +{ + g_return_if_fail(INDICATOR_IS_OBJECT(io)); + IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); + + if (class->entry_activate != NULL) { + return class->entry_activate(io, entry, timestamp); + } + + return; +} + diff --git a/libindicator/indicator-object.h b/libindicator/indicator-object.h index 3c6bec5..79f4757 100644 --- a/libindicator/indicator-object.h +++ b/libindicator/indicator-object.h @@ -51,6 +51,8 @@ typedef enum #define INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_SCROLL "scroll" #define INDICATOR_OBJECT_SIGNAL_SCROLL_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_SCROLL, INDICATOR_OBJECT_TYPE)) +#define INDICATOR_OBJECT_SIGNAL_MENU_SHOW "menu-show" +#define INDICATOR_OBJECT_SIGNAL_MENU_SHOW_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_MENU_SHOW, INDICATOR_OBJECT_TYPE)) typedef struct _IndicatorObject IndicatorObject; typedef struct _IndicatorObjectClass IndicatorObjectClass; @@ -79,8 +81,7 @@ typedef struct _IndicatorObjectEntry IndicatorObjectEntry; @entry_added: Slot for #IndicatorObject::entry-added @entry_removed: Slot for #IndicatorObject::entry-removed @entry_moved: Slot for #IndicatorObject::entry-moved - @indicator_object_reserved_1: Reserved for future use - @indicator_object_reserved_2: Reserved for future use + @menu_show: Slot for #IndicatorObject::menu-show */ struct _IndicatorObjectClass { GObjectClass parent_class; @@ -93,14 +94,22 @@ struct _IndicatorObjectClass { GList * (*get_entries) (IndicatorObject * io); guint (*get_location) (IndicatorObject * io, IndicatorObjectEntry * entry); + void (*entry_activate) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp); + /* Signals */ - void (*entry_added) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); - void (*entry_removed) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); - void (*entry_moved) (IndicatorObject * io, IndicatorObjectEntry * entry, guint old_pos, guint new_pos, gpointer user_data); - void (*scroll) (IndicatorObject * io, gint delta, IndicatorScrollDirection direction); + void (*entry_added) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); + void (*entry_removed) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); + void (*entry_moved) (IndicatorObject * io, IndicatorObjectEntry * entry, guint old_pos, guint new_pos, gpointer user_data); + void (*scroll) (IndicatorObject * io, gint delta, IndicatorScrollDirection direction); + void (*menu_show) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp, gpointer user_data); /* Reserved */ - void (* indicator_object_reserved_1) (void); + void (*reserved1) (void); + void (*reserved2) (void); + void (*reserved3) (void); + void (*reserved4) (void); + void (*reserved5) (void); + void (*reserved6) (void); }; /** @@ -131,6 +140,7 @@ IndicatorObject * indicator_object_new_from_file (const gchar * file); GList * indicator_object_get_entries (IndicatorObject * io); guint indicator_object_get_location (IndicatorObject * io, IndicatorObjectEntry * entry); +void indicator_object_entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp); G_END_DECLS diff --git a/libindicator/indicator.pc.in b/libindicator/indicator.pc.in index 91b70b1..abc5590 100644 --- a/libindicator/indicator.pc.in +++ b/libindicator/indicator.pc.in @@ -4,7 +4,7 @@ libdir=@libdir@ bindir=@bindir@ includedir=@includedir@ -indicatordir=${libdir}/indicators/3/ +indicatordir=${libdir}/indicators/4/ iconsdir=@datarootdir@/@PACKAGE@/icons/ Cflags: -I${includedir}/libindicator-0.3 |