summaryrefslogtreecommitdiff
path: root/gtk/deprecated
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-09-04 21:51:09 +0200
committerBenjamin Otte <otte@redhat.com>2016-10-16 18:17:21 +0200
commitd2a8667f835ddce4ac88b9bee143556f9efa93c4 (patch)
tree157a8ed351e7cfd7ab665886f21fa65e2bed9d38 /gtk/deprecated
parentc0276e2c5cce83932f174ac3cda428ac14d8b70e (diff)
downloadgtk+-d2a8667f835ddce4ac88b9bee143556f9efa93c4.tar.gz
API: Remove GtkStatusIcon
Diffstat (limited to 'gtk/deprecated')
-rw-r--r--gtk/deprecated/Makefile.inc2
-rw-r--r--gtk/deprecated/gtkstatusicon-quartz.c145
-rw-r--r--gtk/deprecated/gtkstatusicon.c2864
-rw-r--r--gtk/deprecated/gtkstatusicon.h182
-rw-r--r--gtk/deprecated/gtktrayicon-x11.c1100
-rw-r--r--gtk/deprecated/gtktrayicon.h75
6 files changed, 0 insertions, 4368 deletions
diff --git a/gtk/deprecated/Makefile.inc b/gtk/deprecated/Makefile.inc
index 7e0e08bdd0..d2afb95258 100644
--- a/gtk/deprecated/Makefile.inc
+++ b/gtk/deprecated/Makefile.inc
@@ -23,7 +23,6 @@ deprecated_h_sources = \
deprecated/gtkradioaction.h \
deprecated/gtkrc.h \
deprecated/gtkrecentaction.h \
- deprecated/gtkstatusicon.h \
deprecated/gtkstock.h \
deprecated/gtkstyle.h \
deprecated/gtkstyleproperties.h \
@@ -72,7 +71,6 @@ deprecated_c_sources = \
deprecated/gtkradioaction.c \
deprecated/gtkrc.c \
deprecated/gtkrecentaction.c \
- deprecated/gtkstatusicon.c \
deprecated/gtkstock.c \
deprecated/gtkstyle.c \
deprecated/gtkstyleproperties.c \
diff --git a/gtk/deprecated/gtkstatusicon-quartz.c b/gtk/deprecated/gtkstatusicon-quartz.c
deleted file mode 100644
index 7a2442b607..0000000000
--- a/gtk/deprecated/gtkstatusicon-quartz.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* gtkstatusicon-quartz.c:
- *
- * Copyright (C) 2006 Imendio AB
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * GCC on Mac OS X handles inlined objective C in C-files.
- *
- * Authors:
- * Mikael Hallendal <micke@imendio.com>
- */
-
-#import <Cocoa/Cocoa.h>
-#include <quartz/gdkquartz.h>
-
-#define QUARTZ_POOL_ALLOC NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]
-#define QUARTZ_POOL_RELEASE [pool release]
-
-@interface GtkQuartzStatusIcon : NSObject
-{
- GtkStatusIcon *status_icon;
- NSStatusBar *ns_bar;
- NSStatusItem *ns_item;
- NSImage *current_image;
- NSString *ns_tooltip;
-}
-- (id) initWithStatusIcon:(GtkStatusIcon *)status_icon;
-- (void) ensureItem;
-- (void) actionCb:(NSObject *)button;
-- (void) setImage:(GdkPixbuf *)pixbuf;
-- (void) setVisible:(gboolean)visible;
-- (void) setToolTip:(const gchar *)tooltip_text;
-- (float) getWidth;
-- (float) getHeight;
-@end
-
-@implementation GtkQuartzStatusIcon : NSObject
-- (id) initWithStatusIcon:(GtkStatusIcon *)icon
-{
- [super init];
- status_icon = icon;
- ns_bar = [NSStatusBar systemStatusBar];
-
- return self;
-}
-
-- (void) ensureItem
-{
- if (ns_item != nil)
- return;
-
- ns_item = [ns_bar statusItemWithLength:NSVariableStatusItemLength];
- [ns_item setAction:@selector(actionCb:)];
- [ns_item setTarget:self];
- [ns_item retain];
-}
-
-- (void) dealloc
-{
- [current_image release];
- [ns_item release];
- [ns_bar release];
-
- [super dealloc];
-}
-
-- (void) actionCb:(NSObject *)button
-{
- NSEvent *event = [NSApp currentEvent];
- double time = [event timestamp];
-
- g_signal_emit (status_icon,
- status_icon_signals [POPUP_MENU_SIGNAL], 0,
- 1,
- time * 1000.0);
-}
-
-- (void) setImage:(GdkPixbuf *)pixbuf
-{
- /* Support NULL */
- [self ensureItem];
-
- if (current_image != nil) {
- [current_image release];
- current_image = nil;
- }
-
- if (!pixbuf) {
- [ns_item release];
- ns_item = nil;
- return;
- }
-
- current_image = gdk_quartz_pixbuf_to_ns_image_libgtk_only (pixbuf);
- [current_image retain];
-
- [ns_item setImage:current_image];
-}
-
-- (void) setVisible:(gboolean)visible
-{
- if (visible) {
- [self ensureItem];
- if (ns_item != nil)
- [ns_item setImage:current_image];
- if (ns_tooltip != nil)
- [ns_item setToolTip:ns_tooltip];
- } else {
- [ns_item release];
- ns_item = nil;
- }
-}
-
-- (void) setToolTip:(const gchar *)tooltip_text
-{
- [ns_tooltip release];
- ns_tooltip = [[NSString stringWithUTF8String:tooltip_text] retain];
-
- [ns_item setToolTip:ns_tooltip];
-}
-
-- (float) getWidth
-{
- return [ns_bar thickness];
-}
-
-- (float) getHeight
-{
- return [ns_bar thickness];
-}
-@end
-
-
-
diff --git a/gtk/deprecated/gtkstatusicon.c b/gtk/deprecated/gtkstatusicon.c
deleted file mode 100644
index b33a296751..0000000000
--- a/gtk/deprecated/gtkstatusicon.c
+++ /dev/null
@@ -1,2864 +0,0 @@
-/* gtkstatusicon.c:
- *
- * Copyright (C) 2003 Sun Microsystems, Inc.
- * Copyright (C) 2005 Hans Breuer <hans@breuer.org>
- * Copyright (C) 2005 Novell, Inc.
- * Copyright (C) 2006 Imendio AB
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- * Mark McLoughlin <mark@skynet.ie>
- * Hans Breuer <hans@breuer.org>
- * Tor Lillqvist <tml@novell.com>
- * Mikael Hallendal <micke@imendio.com>
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-#define GDK_DISABLE_DEPRECATION_WARNINGS
-#include "gtkstatusicon.h"
-
-#include "gtkintl.h"
-#include "gtkiconhelperprivate.h"
-#include "gtkmain.h"
-#include "gtkmarshalers.h"
-#include "gtksizerequest.h"
-#include "gtkprivate.h"
-#include "gtkwidget.h"
-#include "gtktooltip.h"
-#include "gtkicontheme.h"
-#include "gtklabel.h"
-#include "gtkstylecontextprivate.h"
-#include "gtktypebuiltins.h"
-
-#ifdef GDK_WINDOWING_X11
-#include "gdk/x11/gdkx.h"
-#include "gtktrayicon.h"
-#endif
-
-#ifdef GDK_WINDOWING_WIN32
-#include "gdk/win32/gdkwin32.h"
-#define WM_GTK_TRAY_NOTIFICATION (WM_USER+1)
-#endif
-
-
-/**
- * SECTION:gtkstatusicon
- * @Short_description: Display an icon in the system tray
- * @Title: GtkStatusIcon
- *
- * The “system tray” or notification area is normally used for transient icons
- * that indicate some special state. For example, a system tray icon might
- * appear to tell the user that they have new mail, or have an incoming instant
- * message, or something along those lines. The basic idea is that creating an
- * icon in the notification area is less annoying than popping up a dialog.
- *
- * A #GtkStatusIcon object can be used to display an icon in a “system tray”.
- * The icon can have a tooltip, and the user can interact with it by
- * activating it or popping up a context menu. Critical information should
- * not solely be displayed in a #GtkStatusIcon, since it may not be
- * visible (e.g. when the user doesn’t have a notification area on his panel).
- * This can be checked with gtk_status_icon_is_embedded().
- *
- * On X11, the implementation follows the
- * [FreeDesktop System Tray Specification](http://www.freedesktop.org/wiki/Specifications/systemtray-spec).
- * Implementations of the “tray” side of this specification can
- * be found e.g. in the GNOME 2 and KDE panel applications.
- *
- * Note that a GtkStatusIcon is not a widget, but just
- * a #GObject. Making it a widget would be impractical, since the system tray
- * on Win32 doesn’t allow to embed arbitrary widgets.
- *
- * GtkStatusIcon has been deprecated in 3.14. You should consider using
- * notifications or more modern platform-specific APIs instead. GLib provides
- * the #GNotification API which works well with #GtkApplication. Also see this
- * [HowDoI](https://wiki.gnome.org/HowDoI/GNotification).
- */
-
-
-#define BLINK_TIMEOUT 500
-
-enum
-{
- PROP_0,
- PROP_PIXBUF,
- PROP_FILE,
- PROP_STOCK,
- PROP_ICON_NAME,
- PROP_GICON,
- PROP_STORAGE_TYPE,
- PROP_SIZE,
- PROP_SCREEN,
- PROP_VISIBLE,
- PROP_ORIENTATION,
- PROP_EMBEDDED,
- PROP_BLINKING,
- PROP_HAS_TOOLTIP,
- PROP_TOOLTIP_TEXT,
- PROP_TOOLTIP_MARKUP,
- PROP_TITLE
-};
-
-enum
-{
- ACTIVATE_SIGNAL,
- POPUP_MENU_SIGNAL,
- SIZE_CHANGED_SIGNAL,
- BUTTON_PRESS_EVENT_SIGNAL,
- BUTTON_RELEASE_EVENT_SIGNAL,
- SCROLL_EVENT_SIGNAL,
- QUERY_TOOLTIP_SIGNAL,
- LAST_SIGNAL
-};
-
-static guint status_icon_signals [LAST_SIGNAL] = { 0 };
-
-#ifdef GDK_WINDOWING_QUARTZ
-#include "gtkstatusicon-quartz.c"
-#endif
-
-struct _GtkStatusIconPrivate
-{
-#ifdef GDK_WINDOWING_X11
- GtkWidget *tray_icon;
- GtkWidget *image;
-#else
- GtkWidget *dummy_widget;
-#endif
-
-#ifdef GDK_WINDOWING_WIN32
- NOTIFYICONDATAW nid;
- gint taskbar_top;
- gint last_click_x, last_click_y;
- GtkOrientation orientation;
- gchar *tooltip_text;
- gchar *title;
-#endif
-
-#ifdef GDK_WINDOWING_QUARTZ
- GtkQuartzStatusIcon *status_item;
- gchar *tooltip_text;
- gchar *title;
-#endif
-
- gint size;
- GtkImageDefinition *image_def;
- guint visible : 1;
-};
-
-static void gtk_status_icon_constructed (GObject *object);
-static void gtk_status_icon_finalize (GObject *object);
-static void gtk_status_icon_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void gtk_status_icon_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-
-#ifdef GDK_WINDOWING_X11
-static void gtk_status_icon_size_allocate (GtkStatusIcon *status_icon,
- GtkAllocation *allocation);
-static void gtk_status_icon_screen_changed (GtkStatusIcon *status_icon,
- GdkScreen *old_screen);
-static void gtk_status_icon_embedded_changed (GtkStatusIcon *status_icon);
-static void gtk_status_icon_orientation_changed (GtkStatusIcon *status_icon);
-static void gtk_status_icon_padding_changed (GtkStatusIcon *status_icon);
-static void gtk_status_icon_icon_size_changed(GtkStatusIcon *status_icon);
-static void gtk_status_icon_fg_changed (GtkStatusIcon *status_icon);
-static void gtk_status_icon_color_changed (GtkTrayIcon *tray,
- GParamSpec *pspec,
- GtkStatusIcon *status_icon);
-static gboolean gtk_status_icon_scroll (GtkStatusIcon *status_icon,
- GdkEventScroll *event);
-static gboolean gtk_status_icon_query_tooltip (GtkStatusIcon *status_icon,
- gint x,
- gint y,
- gboolean keyboard_tip,
- GtkTooltip *tooltip);
-
-static gboolean gtk_status_icon_key_press (GtkStatusIcon *status_icon,
- GdkEventKey *event);
-static void gtk_status_icon_popup_menu (GtkStatusIcon *status_icon);
-#endif
-static gboolean gtk_status_icon_button_press (GtkStatusIcon *status_icon,
- GdkEventButton *event);
-static gboolean gtk_status_icon_button_release (GtkStatusIcon *status_icon,
- GdkEventButton *event);
-static void gtk_status_icon_reset_image_data (GtkStatusIcon *status_icon);
-static void gtk_status_icon_update_image (GtkStatusIcon *status_icon);
-
-G_DEFINE_TYPE_WITH_PRIVATE (GtkStatusIcon, gtk_status_icon, G_TYPE_OBJECT)
-
-static void
-gtk_status_icon_class_init (GtkStatusIconClass *class)
-{
- GObjectClass *gobject_class = (GObjectClass *) class;
-
- gobject_class->constructed = gtk_status_icon_constructed;
- gobject_class->finalize = gtk_status_icon_finalize;
- gobject_class->set_property = gtk_status_icon_set_property;
- gobject_class->get_property = gtk_status_icon_get_property;
-
- class->button_press_event = NULL;
- class->button_release_event = NULL;
- class->scroll_event = NULL;
- class->query_tooltip = NULL;
-
- g_object_class_install_property (gobject_class,
- PROP_PIXBUF,
- g_param_spec_object ("pixbuf",
- P_("Pixbuf"),
- P_("A GdkPixbuf to display"),
- GDK_TYPE_PIXBUF,
- GTK_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class,
- PROP_FILE,
- g_param_spec_string ("file",
- P_("Filename"),
- P_("Filename to load and display"),
- NULL,
- GTK_PARAM_WRITABLE));
-
- /**
- * GtkStatusIcon:stock:
- *
- * Deprecated: 3.10: Use #GtkStatusIcon:icon-name instead.
- */
- g_object_class_install_property (gobject_class,
- PROP_STOCK,
- g_param_spec_string ("stock",
- P_("Stock ID"),
- P_("Stock ID for a stock image to display"),
- NULL,
- GTK_PARAM_READWRITE | G_PARAM_DEPRECATED));
-
- g_object_class_install_property (gobject_class,
- PROP_ICON_NAME,
- g_param_spec_string ("icon-name",
- P_("Icon Name"),
- P_("The name of the icon from the icon theme"),
- NULL,
- GTK_PARAM_READWRITE));
-
- /**
- * GtkStatusIcon:gicon:
- *
- * The #GIcon displayed in the #GtkStatusIcon. For themed icons,
- * the image will be updated automatically if the theme changes.
- *
- * Since: 2.14
- */
- g_object_class_install_property (gobject_class,
- PROP_GICON,
- g_param_spec_object ("gicon",
- P_("GIcon"),
- P_("The GIcon being displayed"),
- G_TYPE_ICON,
- GTK_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class,
- PROP_STORAGE_TYPE,
- g_param_spec_enum ("storage-type",
- P_("Storage type"),
- P_("The representation being used for image data"),
- GTK_TYPE_IMAGE_TYPE,
- GTK_IMAGE_EMPTY,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_SIZE,
- g_param_spec_int ("size",
- P_("Size"),
- P_("The size of the icon"),
- 0,
- G_MAXINT,
- 0,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_SCREEN,
- g_param_spec_object ("screen",
- P_("Screen"),
- P_("The screen where this status icon will be displayed"),
- GDK_TYPE_SCREEN,
- GTK_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class,
- PROP_VISIBLE,
- g_param_spec_boolean ("visible",
- P_("Visible"),
- P_("Whether the status icon is visible"),
- TRUE,
- GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
-
-
- /**
- * GtkStatusIcon:embedded:
- *
- * %TRUE if the statusicon is embedded in a notification area.
- *
- * Since: 2.12
- */
- g_object_class_install_property (gobject_class,
- PROP_EMBEDDED,
- g_param_spec_boolean ("embedded",
- P_("Embedded"),
- P_("Whether the status icon is embedded"),
- FALSE,
- GTK_PARAM_READABLE));
-
- /**
- * GtkStatusIcon:orientation:
- *
- * The orientation of the tray in which the statusicon
- * is embedded.
- *
- * Since: 2.12
- */
- g_object_class_install_property (gobject_class,
- PROP_ORIENTATION,
- g_param_spec_enum ("orientation",
- P_("Orientation"),
- P_("The orientation of the tray"),
- GTK_TYPE_ORIENTATION,
- GTK_ORIENTATION_HORIZONTAL,
- GTK_PARAM_READABLE));
-
-/**
- * GtkStatusIcon:has-tooltip:
- *
- * Enables or disables the emission of #GtkStatusIcon::query-tooltip on
- * @status_icon. A value of %TRUE indicates that @status_icon can have a
- * tooltip, in this case the status icon will be queried using
- * #GtkStatusIcon::query-tooltip to determine whether it will provide a
- * tooltip or not.
- *
- * Note that setting this property to %TRUE for the first time will change
- * the event masks of the windows of this status icon to include leave-notify
- * and motion-notify events. This will not be undone when the property is set
- * to %FALSE again.
- *
- * Whether this property is respected is platform dependent.
- * For plain text tooltips, use #GtkStatusIcon:tooltip-text in preference.
- *
- * Since: 2.16
- */
- g_object_class_install_property (gobject_class,
- PROP_HAS_TOOLTIP,
- g_param_spec_boolean ("has-tooltip",
- P_("Has tooltip"),
- P_("Whether this tray icon has a tooltip"),
- FALSE,
- GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
-
- /**
- * GtkStatusIcon:tooltip-text:
- *
- * Sets the text of tooltip to be the given string.
- *
- * Also see gtk_tooltip_set_text().
- *
- * This is a convenience property which will take care of getting the
- * tooltip shown if the given string is not %NULL.
- * #GtkStatusIcon:has-tooltip will automatically be set to %TRUE and
- * the default handler for the #GtkStatusIcon::query-tooltip signal
- * will take care of displaying the tooltip.
- *
- * Note that some platforms have limitations on the length of tooltips
- * that they allow on status icons, e.g. Windows only shows the first
- * 64 characters.
- *
- * Since: 2.16
- */
- g_object_class_install_property (gobject_class,
- PROP_TOOLTIP_TEXT,
- g_param_spec_string ("tooltip-text",
- P_("Tooltip Text"),
- P_("The contents of the tooltip for this widget"),
- NULL,
- GTK_PARAM_READWRITE));
- /**
- * GtkStatusIcon:tooltip-markup:
- *
- * Sets the text of tooltip to be the given string, which is marked up
- * with the [Pango text markup language][PangoMarkupFormat].
- * Also see gtk_tooltip_set_markup().
- *
- * This is a convenience property which will take care of getting the
- * tooltip shown if the given string is not %NULL.
- * #GtkStatusIcon:has-tooltip will automatically be set to %TRUE and
- * the default handler for the #GtkStatusIcon::query-tooltip signal
- * will take care of displaying the tooltip.
- *
- * On some platforms, embedded markup will be ignored.
- *
- * Since: 2.16
- */
- g_object_class_install_property (gobject_class,
- PROP_TOOLTIP_MARKUP,
- g_param_spec_string ("tooltip-markup",
- P_("Tooltip markup"),
- P_("The contents of the tooltip for this tray icon"),
- NULL,
- GTK_PARAM_READWRITE));
-
-
- /**
- * GtkStatusIcon:title:
- *
- * The title of this tray icon. This should be a short, human-readable,
- * localized string describing the tray icon. It may be used by tools
- * like screen readers to render the tray icon.
- *
- * Since: 2.18
- */
- g_object_class_install_property (gobject_class,
- PROP_TITLE,
- g_param_spec_string ("title",
- P_("Title"),
- P_("The title of this tray icon"),
- NULL,
- GTK_PARAM_READWRITE));
-
- /**
- * GtkStatusIcon::activate:
- * @status_icon: the object which received the signal
- *
- * Gets emitted when the user activates the status icon.
- * If and how status icons can activated is platform-dependent.
- *
- * Unlike most G_SIGNAL_ACTION signals, this signal is meant to
- * be used by applications and should be wrapped by language bindings.
- *
- * Since: 2.10
- */
- status_icon_signals [ACTIVATE_SIGNAL] =
- g_signal_new (I_("activate"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GtkStatusIconClass, activate),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- /**
- * GtkStatusIcon::popup-menu:
- * @status_icon: the object which received the signal
- * @button: the button that was pressed, or 0 if the
- * signal is not emitted in response to a button press event
- * @activate_time: the timestamp of the event that
- * triggered the signal emission
- *
- * Gets emitted when the user brings up the context menu
- * of the status icon. Whether status icons can have context
- * menus and how these are activated is platform-dependent.
- *
- * The @button and @activate_time parameters should be
- * passed as the last to arguments to gtk_menu_popup().
- *
- * Unlike most G_SIGNAL_ACTION signals, this signal is meant to
- * be used by applications and should be wrapped by language bindings.
- *
- * Since: 2.10
- */
- status_icon_signals [POPUP_MENU_SIGNAL] =
- g_signal_new (I_("popup-menu"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GtkStatusIconClass, popup_menu),
- NULL,
- NULL,
- _gtk_marshal_VOID__UINT_UINT,
- G_TYPE_NONE,
- 2,
- G_TYPE_UINT,
- G_TYPE_UINT);
-
- /**
- * GtkStatusIcon::size-changed:
- * @status_icon: the object which received the signal
- * @size: the new size
- *
- * Gets emitted when the size available for the image
- * changes, e.g. because the notification area got resized.
- *
- * Returns: %TRUE if the icon was updated for the new
- * size. Otherwise, GTK+ will scale the icon as necessary.
- *
- * Since: 2.10
- */
- status_icon_signals [SIZE_CHANGED_SIGNAL] =
- g_signal_new (I_("size-changed"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GtkStatusIconClass, size_changed),
- g_signal_accumulator_true_handled,
- NULL,
- _gtk_marshal_BOOLEAN__INT,
- G_TYPE_BOOLEAN,
- 1,
- G_TYPE_INT);
-
- /**
- * GtkStatusIcon::button-press-event:
- * @status_icon: the object which received the signal
- * @event: (type Gdk.EventButton): the #GdkEventButton which triggered
- * this signal
- *
- * The ::button-press-event signal will be emitted when a button
- * (typically from a mouse) is pressed.
- *
- * Whether this event is emitted is platform-dependent. Use the ::activate
- * and ::popup-menu signals in preference.
- *
- * Returns: %TRUE to stop other handlers from being invoked
- * for the event. %FALSE to propagate the event further.
- *
- * Since: 2.14
- */
- status_icon_signals [BUTTON_PRESS_EVENT_SIGNAL] =
- g_signal_new (I_("button_press_event"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GtkStatusIconClass, button_press_event),
- g_signal_accumulator_true_handled, NULL,
- _gtk_marshal_BOOLEAN__BOXED,
- G_TYPE_BOOLEAN, 1,
- GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * GtkStatusIcon::button-release-event:
- * @status_icon: the object which received the signal
- * @event: (type Gdk.EventButton): the #GdkEventButton which triggered
- * this signal
- *
- * The ::button-release-event signal will be emitted when a button
- * (typically from a mouse) is released.
- *
- * Whether this event is emitted is platform-dependent. Use the ::activate
- * and ::popup-menu signals in preference.
- *
- * Returns: %TRUE to stop other handlers from being invoked
- * for the event. %FALSE to propagate the event further.
- *
- * Since: 2.14
- */
- status_icon_signals [BUTTON_RELEASE_EVENT_SIGNAL] =
- g_signal_new (I_("button_release_event"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GtkStatusIconClass, button_release_event),
- g_signal_accumulator_true_handled, NULL,
- _gtk_marshal_BOOLEAN__BOXED,
- G_TYPE_BOOLEAN, 1,
- GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * GtkStatusIcon::scroll-event:
- * @status_icon: the object which received the signal.
- * @event: (type Gdk.EventScroll): the #GdkEventScroll which triggered
- * this signal
- *
- * The ::scroll-event signal is emitted when a button in the 4 to 7
- * range is pressed. Wheel mice are usually configured to generate
- * button press events for buttons 4 and 5 when the wheel is turned.
- *
- * Whether this event is emitted is platform-dependent.
- *
- * Returns: %TRUE to stop other handlers from being invoked for the event.
- * %FALSE to propagate the event further.
- *
- * Since: 2.16
- */
- status_icon_signals[SCROLL_EVENT_SIGNAL] =
- g_signal_new (I_("scroll_event"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GtkStatusIconClass, scroll_event),
- g_signal_accumulator_true_handled, NULL,
- _gtk_marshal_BOOLEAN__BOXED,
- G_TYPE_BOOLEAN, 1,
- GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * GtkStatusIcon::query-tooltip:
- * @status_icon: the object which received the signal
- * @x: the x coordinate of the cursor position where the request has been
- * emitted, relative to @status_icon
- * @y: the y coordinate of the cursor position where the request has been
- * emitted, relative to @status_icon
- * @keyboard_mode: %TRUE if the tooltip was trigged using the keyboard
- * @tooltip: a #GtkTooltip
- *
- * Emitted when the hover timeout has expired with the
- * cursor hovering above @status_icon; or emitted when @status_icon got
- * focus in keyboard mode.
- *
- * Using the given coordinates, the signal handler should determine
- * whether a tooltip should be shown for @status_icon. If this is
- * the case %TRUE should be returned, %FALSE otherwise. Note that if
- * @keyboard_mode is %TRUE, the values of @x and @y are undefined and
- * should not be used.
- *
- * The signal handler is free to manipulate @tooltip with the therefore
- * destined function calls.
- *
- * Whether this signal is emitted is platform-dependent.
- * For plain text tooltips, use #GtkStatusIcon:tooltip-text in preference.
- *
- * Returns: %TRUE if @tooltip should be shown right now, %FALSE otherwise.
- *
- * Since: 2.16
- */
- status_icon_signals [QUERY_TOOLTIP_SIGNAL] =
- g_signal_new (I_("query_tooltip"),
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GtkStatusIconClass, query_tooltip),
- g_signal_accumulator_true_handled, NULL,
- _gtk_marshal_BOOLEAN__INT_INT_BOOLEAN_OBJECT,
- G_TYPE_BOOLEAN, 4,
- G_TYPE_INT,
- G_TYPE_INT,
- G_TYPE_BOOLEAN,
- GTK_TYPE_TOOLTIP);
-}
-
-#ifdef GDK_WINDOWING_WIN32
-
-static void
-build_button_event (GtkStatusIconPrivate *priv,
- GdkEventButton *e,
- guint button)
-{
- POINT pos;
- GdkRectangle monitor0;
-
- /* We know that gdk/win32 puts the primary monitor at index 0 */
- gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor0);
- e->window = g_object_ref (gdk_get_default_root_window ());
- e->send_event = TRUE;
- e->time = GetTickCount ();
- GetCursorPos (&pos);
- priv->last_click_x = e->x = pos.x + monitor0.x;
- priv->last_click_y = e->y = pos.y + monitor0.y;
- e->axes = NULL;
- e->state = 0;
- e->button = button;
- //FIXME: e->device = gdk_display_get_default ()->core_pointer;
- e->x_root = e->x;
- e->y_root = e->y;
-}
-
-typedef struct
-{
- GtkStatusIcon *status_icon;
- GdkEventButton *event;
-} ButtonCallbackData;
-
-static gboolean
-button_callback (gpointer data)
-{
- ButtonCallbackData *bc = (ButtonCallbackData *) data;
-
- if (bc->event->type == GDK_BUTTON_PRESS)
- gtk_status_icon_button_press (bc->status_icon, bc->event);
- else
- gtk_status_icon_button_release (bc->status_icon, bc->event);
-
- gdk_event_free ((GdkEvent *) bc->event);
- g_free (data);
-
- return G_SOURCE_REMOVE;
-}
-
-static UINT taskbar_created_msg = 0;
-static GSList *status_icons = NULL;
-static UINT status_icon_id = 0;
-
-static GtkStatusIcon *
-find_status_icon (UINT id)
-{
- GSList *rover;
-
- for (rover = status_icons; rover != NULL; rover = rover->next)
- {
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (rover->data);
- GtkStatusIconPrivate *priv = status_icon->priv;
-
- if (priv->nid.uID == id)
- return status_icon;
- }
-
- return NULL;
-}
-
-static LRESULT CALLBACK
-wndproc (HWND hwnd,
- UINT message,
- WPARAM wparam,
- LPARAM lparam)
-{
- if (message == taskbar_created_msg)
- {
- GSList *rover;
-
- for (rover = status_icons; rover != NULL; rover = rover->next)
- {
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (rover->data);
- GtkStatusIconPrivate *priv = status_icon->priv;
-
- /* taskbar_created_msg is also fired when DPI changes. Try to delete existing icons if possible. */
- if (!Shell_NotifyIconW (NIM_DELETE, &priv->nid))
- {
- g_warning (G_STRLOC ": Shell_NotifyIcon(NIM_DELETE) on existing icon failed");
- }
-
- priv->nid.hWnd = hwnd;
- priv->nid.uID = status_icon_id++;
- priv->nid.uCallbackMessage = WM_GTK_TRAY_NOTIFICATION;
- priv->nid.uFlags = NIF_MESSAGE;
-
- if (!Shell_NotifyIconW (NIM_ADD, &priv->nid))
- {
- g_warning (G_STRLOC ": Shell_NotifyIcon(NIM_ADD) failed");
- priv->nid.hWnd = NULL;
- continue;
- }
-
- gtk_status_icon_update_image (status_icon);
- }
- return 0;
- }
-
- if (message == WM_GTK_TRAY_NOTIFICATION)
- {
- ButtonCallbackData *bc;
- guint button;
-
- switch (lparam)
- {
- case WM_LBUTTONDOWN:
- button = 1;
- goto buttondown0;
-
- case WM_MBUTTONDOWN:
- button = 2;
- goto buttondown0;
-
- case WM_RBUTTONDOWN:
- button = 3;
- goto buttondown0;
-
- case WM_XBUTTONDOWN:
- if (HIWORD (wparam) == XBUTTON1)
- button = 4;
- else
- button = 5;
-
- buttondown0:
- bc = g_new (ButtonCallbackData, 1);
- bc->event = (GdkEventButton *) gdk_event_new (GDK_BUTTON_PRESS);
- bc->status_icon = find_status_icon (wparam);
- build_button_event (bc->status_icon->priv, bc->event, button);
- g_idle_add (button_callback, bc);
- break;
-
- case WM_LBUTTONUP:
- button = 1;
- goto buttonup0;
-
- case WM_MBUTTONUP:
- button = 2;
- goto buttonup0;
-
- case WM_RBUTTONUP:
- button = 3;
- goto buttonup0;
-
- case WM_XBUTTONUP:
- if (HIWORD (wparam) == XBUTTON1)
- button = 4;
- else
- button = 5;
-
- buttonup0:
- bc = g_new (ButtonCallbackData, 1);
- bc->event = (GdkEventButton *) gdk_event_new (GDK_BUTTON_RELEASE);
- bc->status_icon = find_status_icon (wparam);
- build_button_event (bc->status_icon->priv, bc->event, button);
- g_idle_add (button_callback, bc);
- break;
-
- default :
- break;
- }
- return 0;
- }
- else
- {
- return DefWindowProc (hwnd, message, wparam, lparam);
- }
-}
-
-static HWND
-create_tray_observer (void)
-{
- WNDCLASS wclass;
- static HWND hwnd = NULL;
- ATOM klass;
- HINSTANCE hmodule = GetModuleHandle (NULL);
-
- if (hwnd)
- return hwnd;
-
- taskbar_created_msg = RegisterWindowMessage("TaskbarCreated");
-
- memset (&wclass, 0, sizeof(WNDCLASS));
- wclass.lpszClassName = "gtkstatusicon-observer";
- wclass.lpfnWndProc = wndproc;
- wclass.hInstance = hmodule;
-
- klass = RegisterClass (&wclass);
- if (!klass)
- return NULL;
-
- hwnd = CreateWindow (MAKEINTRESOURCE (klass),
- NULL, WS_POPUP,
- 0, 0, 1, 1, NULL, NULL,
- hmodule, NULL);
- if (!hwnd)
- {
- UnregisterClass (MAKEINTRESOURCE(klass), hmodule);
- return NULL;
- }
-
- return hwnd;
-}
-
-#endif
-
-static void
-gtk_status_icon_init (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
-
- priv = gtk_status_icon_get_instance_private (status_icon);
- status_icon->priv = priv;
-
- priv->image_def = gtk_image_definition_new_empty ();
- priv->visible = TRUE;
-
-#ifdef GDK_WINDOWING_X11
- if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
- {
- priv->size = 0;
- priv->tray_icon = GTK_WIDGET (_gtk_tray_icon_new (NULL));
-
- gtk_widget_add_events (GTK_WIDGET (priv->tray_icon),
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_SCROLL_MASK);
-
- g_signal_connect_swapped (priv->tray_icon, "key-press-event",
- G_CALLBACK (gtk_status_icon_key_press), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "popup-menu",
- G_CALLBACK (gtk_status_icon_popup_menu), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "notify::embedded",
- G_CALLBACK (gtk_status_icon_embedded_changed), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "notify::orientation",
- G_CALLBACK (gtk_status_icon_orientation_changed), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "notify::padding",
- G_CALLBACK (gtk_status_icon_padding_changed), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "notify::icon-size",
- G_CALLBACK (gtk_status_icon_icon_size_changed), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "notify::fg-color",
- G_CALLBACK (gtk_status_icon_fg_changed), status_icon);
- g_signal_connect (priv->tray_icon, "notify::error-color",
- G_CALLBACK (gtk_status_icon_color_changed), status_icon);
- g_signal_connect (priv->tray_icon, "notify::warning-color",
- G_CALLBACK (gtk_status_icon_color_changed), status_icon);
- g_signal_connect (priv->tray_icon, "notify::success-color",
- G_CALLBACK (gtk_status_icon_color_changed), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "button-press-event",
- G_CALLBACK (gtk_status_icon_button_press), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "button-release-event",
- G_CALLBACK (gtk_status_icon_button_release), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "scroll-event",
- G_CALLBACK (gtk_status_icon_scroll), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "query-tooltip",
- G_CALLBACK (gtk_status_icon_query_tooltip), status_icon);
- g_signal_connect_swapped (priv->tray_icon, "screen-changed",
- G_CALLBACK (gtk_status_icon_screen_changed), status_icon);
- priv->image = gtk_image_new ();
- gtk_widget_set_can_focus (priv->image, TRUE);
- gtk_container_add (GTK_CONTAINER (priv->tray_icon), priv->image);
- gtk_widget_show (priv->image);
-
- /* Force-initialize the symbolic colors */
- g_object_notify (G_OBJECT (priv->tray_icon), "fg-color");
- g_object_notify (G_OBJECT (priv->tray_icon), "error-color");
- g_object_notify (G_OBJECT (priv->tray_icon), "warning-color");
- g_object_notify (G_OBJECT (priv->tray_icon), "success-color");
-
- g_signal_connect_swapped (priv->image, "size-allocate",
- G_CALLBACK (gtk_status_icon_size_allocate), status_icon);
- }
-#else /* !GDK_WINDOWING_X11 */
- priv->dummy_widget = gtk_label_new ("");
-#endif
-
-#ifdef GDK_WINDOWING_WIN32
-
- /* Get position and orientation of Windows taskbar. */
- {
- APPBARDATA abd;
-
- abd.cbSize = sizeof (abd);
- SHAppBarMessage (ABM_GETTASKBARPOS, &abd);
- if (abd.rc.bottom - abd.rc.top > abd.rc.right - abd.rc.left)
- priv->orientation = GTK_ORIENTATION_VERTICAL;
- else
- priv->orientation = GTK_ORIENTATION_HORIZONTAL;
-
- priv->taskbar_top = abd.rc.top;
- }
-
- priv->last_click_x = priv->last_click_y = 0;
-
- /* Are the system tray icons always 16 pixels square? */
- priv->size = 16;
-
- memset (&priv->nid, 0, sizeof (priv->nid));
-
- priv->nid.hWnd = create_tray_observer ();
- priv->nid.uID = status_icon_id++;
- priv->nid.uCallbackMessage = WM_GTK_TRAY_NOTIFICATION;
- priv->nid.uFlags = NIF_MESSAGE;
-
- /* To help win7 identify the icon create it with an application "unique" tip */
- if (g_get_prgname ())
- {
- WCHAR *wcs = g_utf8_to_utf16 (g_get_prgname (), -1, NULL, NULL, NULL);
-
- priv->nid.uFlags |= NIF_TIP;
- wcsncpy (priv->nid.szTip, wcs, G_N_ELEMENTS (priv->nid.szTip) - 1);
- priv->nid.szTip[G_N_ELEMENTS (priv->nid.szTip) - 1] = 0;
- g_free (wcs);
- }
-
- if (!Shell_NotifyIconW (NIM_ADD, &priv->nid))
- {
- g_warning (G_STRLOC ": Shell_NotifyIcon(NIM_ADD) failed");
- priv->nid.hWnd = NULL;
- }
-
- status_icons = g_slist_append (status_icons, status_icon);
-
-#endif
-
-#ifdef GDK_WINDOWING_QUARTZ
- QUARTZ_POOL_ALLOC;
-
- priv->status_item = [[GtkQuartzStatusIcon alloc] initWithStatusIcon:status_icon];
- priv->size = [priv->status_item getHeight];
-
- QUARTZ_POOL_RELEASE;
-
-#endif
-}
-
-static void
-gtk_status_icon_constructed (GObject *object)
-{
- G_OBJECT_CLASS (gtk_status_icon_parent_class)->constructed (object);
-
-#ifdef GDK_WINDOWING_X11
- {
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (object);
- GtkStatusIconPrivate *priv = status_icon->priv;
-
- if (priv->visible && priv->tray_icon)
- gtk_widget_show (priv->tray_icon);
- }
-#endif
-}
-
-static void
-gtk_status_icon_finalize (GObject *object)
-{
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (object);
- GtkStatusIconPrivate *priv = status_icon->priv;
-
- gtk_status_icon_reset_image_data (status_icon);
- gtk_image_definition_unref (priv->image_def);
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- {
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_key_press, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_popup_menu, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_embedded_changed, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_orientation_changed, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_padding_changed, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_icon_size_changed, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_fg_changed, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_color_changed, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_button_press, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_button_release, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_scroll, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_query_tooltip, status_icon);
- g_signal_handlers_disconnect_by_func (priv->tray_icon,
- gtk_status_icon_screen_changed, status_icon);
- gtk_widget_destroy (priv->image);
- gtk_widget_destroy (priv->tray_icon);
- }
-#else /* !GDK_WINDOWING_X11 */
- gtk_widget_destroy (priv->dummy_widget);
-#endif
-
-#ifdef GDK_WINDOWING_WIN32
- if (priv->nid.hWnd != NULL && priv->visible)
- Shell_NotifyIconW (NIM_DELETE, &priv->nid);
- if (priv->nid.hIcon)
- DestroyIcon (priv->nid.hIcon);
- g_free (priv->tooltip_text);
-
- status_icons = g_slist_remove (status_icons, status_icon);
-#endif
-
-#ifdef GDK_WINDOWING_QUARTZ
- QUARTZ_POOL_ALLOC;
- [priv->status_item release];
- QUARTZ_POOL_RELEASE;
- g_free (priv->tooltip_text);
-#endif
-
- G_OBJECT_CLASS (gtk_status_icon_parent_class)->finalize (object);
-}
-
-static void
-gtk_status_icon_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (object);
-
- switch (prop_id)
- {
- case PROP_PIXBUF:
- gtk_status_icon_set_from_pixbuf (status_icon, g_value_get_object (value));
- break;
- case PROP_FILE:
- gtk_status_icon_set_from_file (status_icon, g_value_get_string (value));
- break;
- case PROP_STOCK:
- gtk_status_icon_set_from_stock (status_icon, g_value_get_string (value));
- break;
- case PROP_ICON_NAME:
- gtk_status_icon_set_from_icon_name (status_icon, g_value_get_string (value));
- break;
- case PROP_GICON:
- gtk_status_icon_set_from_gicon (status_icon, g_value_get_object (value));
- break;
- case PROP_SCREEN:
- gtk_status_icon_set_screen (status_icon, g_value_get_object (value));
- break;
- case PROP_VISIBLE:
- gtk_status_icon_set_visible (status_icon, g_value_get_boolean (value));
- break;
- case PROP_HAS_TOOLTIP:
- gtk_status_icon_set_has_tooltip (status_icon, g_value_get_boolean (value));
- break;
- case PROP_TOOLTIP_TEXT:
- gtk_status_icon_set_tooltip_text (status_icon, g_value_get_string (value));
- break;
- case PROP_TOOLTIP_MARKUP:
- gtk_status_icon_set_tooltip_markup (status_icon, g_value_get_string (value));
- break;
- case PROP_TITLE:
- gtk_status_icon_set_title (status_icon, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gtk_status_icon_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (object);
-
- switch (prop_id)
- {
- case PROP_PIXBUF:
- g_value_set_object (value, gtk_status_icon_get_pixbuf (status_icon));
- break;
- case PROP_STOCK:
- g_value_set_string (value, gtk_status_icon_get_stock (status_icon));
- break;
- case PROP_ICON_NAME:
- g_value_set_string (value, gtk_status_icon_get_icon_name (status_icon));
- break;
- case PROP_GICON:
- g_value_set_object (value, gtk_status_icon_get_gicon (status_icon));
- break;
- case PROP_STORAGE_TYPE:
- g_value_set_enum (value, gtk_status_icon_get_storage_type (status_icon));
- break;
- case PROP_SIZE:
- g_value_set_int (value, gtk_status_icon_get_size (status_icon));
- break;
- case PROP_SCREEN:
- g_value_set_object (value, gtk_status_icon_get_screen (status_icon));
- break;
- case PROP_VISIBLE:
- g_value_set_boolean (value, gtk_status_icon_get_visible (status_icon));
- break;
- case PROP_EMBEDDED:
- g_value_set_boolean (value, gtk_status_icon_is_embedded (status_icon));
- break;
- case PROP_ORIENTATION:
-#ifdef GDK_WINDOWING_X11
- if (status_icon->priv->tray_icon)
- g_value_set_enum (value, _gtk_tray_icon_get_orientation (GTK_TRAY_ICON (status_icon->priv->tray_icon)));
- else
- g_value_set_enum (value, GTK_ORIENTATION_HORIZONTAL);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- g_value_set_enum (value, status_icon->priv->orientation);
-#endif
- break;
- case PROP_HAS_TOOLTIP:
- g_value_set_boolean (value, gtk_status_icon_get_has_tooltip (status_icon));
- break;
- case PROP_TOOLTIP_TEXT:
- g_value_set_string (value, gtk_status_icon_get_tooltip_text (status_icon));
- break;
- case PROP_TOOLTIP_MARKUP:
- g_value_set_string (value, gtk_status_icon_get_tooltip_markup (status_icon));
- break;
- case PROP_TITLE:
- g_value_set_string (value, gtk_status_icon_get_title (status_icon));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/**
- * gtk_status_icon_new:
- *
- * Creates an empty status icon object.
- *
- * Returns: a new #GtkStatusIcon
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-GtkStatusIcon *
-gtk_status_icon_new (void)
-{
- return g_object_new (GTK_TYPE_STATUS_ICON, NULL);
-}
-
-/**
- * gtk_status_icon_new_from_pixbuf:
- * @pixbuf: a #GdkPixbuf
- *
- * Creates a status icon displaying @pixbuf.
- *
- * The image will be scaled down to fit in the available
- * space in the notification area, if necessary.
- *
- * Returns: a new #GtkStatusIcon
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-GtkStatusIcon *
-gtk_status_icon_new_from_pixbuf (GdkPixbuf *pixbuf)
-{
- return g_object_new (GTK_TYPE_STATUS_ICON,
- "pixbuf", pixbuf,
- NULL);
-}
-
-/**
- * gtk_status_icon_new_from_file:
- * @filename: (type filename): a filename
- *
- * Creates a status icon displaying the file @filename.
- *
- * The image will be scaled down to fit in the available
- * space in the notification area, if necessary.
- *
- * Returns: a new #GtkStatusIcon
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-GtkStatusIcon *
-gtk_status_icon_new_from_file (const gchar *filename)
-{
- return g_object_new (GTK_TYPE_STATUS_ICON,
- "file", filename,
- NULL);
-}
-
-/**
- * gtk_status_icon_new_from_stock:
- * @stock_id: a stock icon id
- *
- * Creates a status icon displaying a stock icon. Sample stock icon
- * names are #GTK_STOCK_OPEN, #GTK_STOCK_QUIT. You can register your
- * own stock icon names, see gtk_icon_factory_add_default() and
- * gtk_icon_factory_add().
- *
- * Returns: a new #GtkStatusIcon
- *
- * Since: 2.10
- *
- * Deprecated: 3.10: Use gtk_status_icon_new_from_icon_name() instead.
- **/
-GtkStatusIcon *
-gtk_status_icon_new_from_stock (const gchar *stock_id)
-{
- return g_object_new (GTK_TYPE_STATUS_ICON,
- "stock", stock_id,
- NULL);
-}
-
-/**
- * gtk_status_icon_new_from_icon_name:
- * @icon_name: an icon name
- *
- * Creates a status icon displaying an icon from the current icon theme.
- * If the current icon theme is changed, the icon will be updated
- * appropriately.
- *
- * Returns: a new #GtkStatusIcon
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-GtkStatusIcon *
-gtk_status_icon_new_from_icon_name (const gchar *icon_name)
-{
- return g_object_new (GTK_TYPE_STATUS_ICON,
- "icon-name", icon_name,
- NULL);
-}
-
-/**
- * gtk_status_icon_new_from_gicon:
- * @icon: a #GIcon
- *
- * Creates a status icon displaying a #GIcon. If the icon is a
- * themed icon, it will be updated when the theme changes.
- *
- * Returns: a new #GtkStatusIcon
- *
- * Since: 2.14
- *
- * Deprecated: 3.14: Use notifications
- **/
-GtkStatusIcon *
-gtk_status_icon_new_from_gicon (GIcon *icon)
-{
- return g_object_new (GTK_TYPE_STATUS_ICON,
- "gicon", icon,
- NULL);
-}
-
-static void
-emit_activate_signal (GtkStatusIcon *status_icon)
-{
- g_signal_emit (status_icon,
- status_icon_signals [ACTIVATE_SIGNAL], 0);
-}
-
-static void
-emit_popup_menu_signal (GtkStatusIcon *status_icon,
- guint button,
- guint32 activate_time)
-{
- g_signal_emit (status_icon,
- status_icon_signals [POPUP_MENU_SIGNAL], 0,
- button,
- activate_time);
-}
-
-#ifdef GDK_WINDOWING_X11
-
-static gboolean
-emit_size_changed_signal (GtkStatusIcon *status_icon,
- gint size)
-{
- gboolean handled = FALSE;
-
- g_signal_emit (status_icon,
- status_icon_signals [SIZE_CHANGED_SIGNAL], 0,
- size,
- &handled);
-
- return handled;
-}
-
-#endif
-
-/* rounds the pixel size to the nearest size avaiable in the theme */
-static gint
-round_pixel_size (GtkWidget *widget,
- gint pixel_size)
-{
- GtkIconSize s;
- gint w, h, d, dist, size;
-
- dist = G_MAXINT;
- size = 0;
-
- for (s = GTK_ICON_SIZE_MENU; s <= GTK_ICON_SIZE_DIALOG; s++)
- {
- if (gtk_icon_size_lookup (s, &w, &h))
- {
- d = MAX (abs (pixel_size - w), abs (pixel_size - h));
- if (d < dist)
- {
- dist = d;
- size = MAX (w, h);
- }
- }
- }
-
- return size;
-}
-
-static void
-gtk_status_icon_update_image (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
-#ifdef GDK_WINDOWING_WIN32
- HICON prev_hicon;
-#endif
- GtkIconHelper *icon_helper;
- cairo_surface_t *surface;
- GtkWidget *widget;
- GdkPixbuf *pixbuf;
- gint round_size;
-
-#ifdef GDK_WINDOWING_X11
- widget = priv->image;
-#else
- widget = priv->dummy_widget;
-#endif
-
- if (widget == NULL)
- return;
-
- round_size = round_pixel_size (widget, priv->size);
-
- icon_helper = gtk_icon_helper_new (gtk_style_context_get_node (gtk_widget_get_style_context (widget)), widget);
- _gtk_icon_helper_set_force_scale_pixbuf (icon_helper, TRUE);
- _gtk_icon_helper_set_definition (icon_helper, priv->image_def);
- _gtk_icon_helper_set_icon_size (icon_helper, GTK_ICON_SIZE_SMALL_TOOLBAR);
- _gtk_icon_helper_set_pixel_size (icon_helper, round_size);
- surface = gtk_icon_helper_load_surface (icon_helper, 1);
- if (surface)
- {
- pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, round_size, round_size);
- cairo_surface_destroy (surface);
- }
- else
- pixbuf = NULL;
- g_object_unref (icon_helper);
-
- if (pixbuf != NULL)
- {
-#ifdef GDK_WINDOWING_X11
- gtk_image_set_from_pixbuf (GTK_IMAGE (priv->image), pixbuf);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- prev_hicon = priv->nid.hIcon;
- priv->nid.hIcon = gdk_win32_pixbuf_to_hicon_libgtk_only (pixbuf);
- priv->nid.uFlags |= NIF_ICON;
- if (priv->nid.hWnd != NULL && priv->visible)
- if (!Shell_NotifyIconW (NIM_MODIFY, &priv->nid))
- g_warning (G_STRLOC ": Shell_NotifyIcon(NIM_MODIFY) failed");
- if (prev_hicon)
- DestroyIcon (prev_hicon);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- QUARTZ_POOL_ALLOC;
- [priv->status_item setImage:pixbuf];
- QUARTZ_POOL_RELEASE;
-#endif
- }
- else
- {
-#ifdef GDK_WINDOWING_X11
- gtk_image_set_from_pixbuf (GTK_IMAGE (priv->image), NULL);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- priv->nid.uFlags &= ~NIF_ICON;
- if (priv->nid.hWnd != NULL && priv->visible)
- if (!Shell_NotifyIconW (NIM_MODIFY, &priv->nid))
- g_warning (G_STRLOC ": Shell_NotifyIcon(NIM_MODIFY) failed");
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- [priv->status_item setImage:NULL];
-#endif
- }
-
- g_clear_object (&pixbuf);
-}
-
-#ifdef GDK_WINDOWING_X11
-
-static void
-gtk_status_icon_size_allocate (GtkStatusIcon *status_icon,
- GtkAllocation *allocation)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
- GtkOrientation orientation;
- gint size;
-
- orientation = _gtk_tray_icon_get_orientation (GTK_TRAY_ICON (priv->tray_icon));
-
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
- size = allocation->height;
- else
- size = allocation->width;
-
- if (priv->size - 1 > size || priv->size + 1 < size)
- {
- priv->size = size;
-
- g_object_notify (G_OBJECT (status_icon), "size");
-
- if (!emit_size_changed_signal (status_icon, size))
- gtk_status_icon_update_image (status_icon);
- }
-}
-
-static void
-gtk_status_icon_screen_changed (GtkStatusIcon *status_icon,
- GdkScreen *old_screen)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
-
- if (gtk_widget_get_screen (priv->tray_icon) != old_screen)
- {
- g_object_notify (G_OBJECT (status_icon), "screen");
- }
-}
-
-static void
-gtk_status_icon_padding_changed (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
- GtkOrientation orientation;
- gint padding;
-
- orientation = _gtk_tray_icon_get_orientation (GTK_TRAY_ICON (priv->tray_icon));
- padding = _gtk_tray_icon_get_padding (GTK_TRAY_ICON (priv->tray_icon));
-
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
- {
- gtk_widget_set_margin_start (priv->image, padding);
- gtk_widget_set_margin_end (priv->image, padding);
- }
- else
- {
- gtk_widget_set_margin_bottom (priv->image, padding);
- gtk_widget_set_margin_top (priv->image, padding);
- }
-}
-
-static void
-gtk_status_icon_icon_size_changed (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
- gint icon_size;
-
- icon_size = _gtk_tray_icon_get_icon_size (GTK_TRAY_ICON (priv->tray_icon));
-
- if (icon_size != 0)
- gtk_image_set_pixel_size (GTK_IMAGE (priv->image), icon_size);
- else
- gtk_image_set_pixel_size (GTK_IMAGE (priv->image), -1);
-}
-
-static void
-gtk_status_icon_embedded_changed (GtkStatusIcon *status_icon)
-{
- gtk_status_icon_padding_changed (status_icon);
- gtk_status_icon_icon_size_changed (status_icon);
- g_object_notify (G_OBJECT (status_icon), "embedded");
-}
-
-static void
-gtk_status_icon_orientation_changed (GtkStatusIcon *status_icon)
-{
- gtk_status_icon_padding_changed (status_icon);
- g_object_notify (G_OBJECT (status_icon), "orientation");
-}
-
-static void
-gtk_status_icon_fg_changed (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
- GdkRGBA *rgba;
-
- g_object_get (priv->tray_icon, "fg-color", &rgba, NULL);
-
- gtk_widget_override_color (priv->image, GTK_STATE_FLAG_NORMAL, rgba);
-
- gdk_rgba_free (rgba);
-}
-
-static void
-gtk_status_icon_color_changed (GtkTrayIcon *tray,
- GParamSpec *pspec,
- GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
- const gchar *name;
-
- switch (pspec->name[0])
- {
- case 'e':
- name = "error";
- break;
- case 'w':
- name = "warning";
- break;
- case 's':
- name = "success";
- break;
- default:
- name = NULL;
- break;
- }
-
- if (name)
- {
- GdkRGBA rgba;
-
- g_object_get (priv->tray_icon, pspec->name, &rgba, NULL);
-
- rgba.alpha = 1;
-
- gtk_widget_override_symbolic_color (priv->image, name, &rgba);
- }
-}
-
-static gboolean
-gtk_status_icon_key_press (GtkStatusIcon *status_icon,
- GdkEventKey *event)
-{
- guint state, keyval;
-
- state = event->state & gtk_accelerator_get_default_mod_mask ();
- keyval = event->keyval;
- if (state == 0 &&
- (keyval == GDK_KEY_Return ||
- keyval == GDK_KEY_KP_Enter ||
- keyval == GDK_KEY_ISO_Enter ||
- keyval == GDK_KEY_space ||
- keyval == GDK_KEY_KP_Space))
- {
- emit_activate_signal (status_icon);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-gtk_status_icon_popup_menu (GtkStatusIcon *status_icon)
-{
- emit_popup_menu_signal (status_icon, 0, gtk_get_current_event_time ());
-}
-
-#endif /* GDK_WINDOWING_X11 */
-
-static gboolean
-gtk_status_icon_button_press (GtkStatusIcon *status_icon,
- GdkEventButton *event)
-{
- gboolean handled = FALSE;
-
- g_signal_emit (status_icon,
- status_icon_signals [BUTTON_PRESS_EVENT_SIGNAL], 0,
- event, &handled);
- if (handled)
- return TRUE;
-
- if (gdk_event_triggers_context_menu ((GdkEvent *) event))
- {
- emit_popup_menu_signal (status_icon, event->button, event->time);
- return TRUE;
- }
- else if (event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
- {
- emit_activate_signal (status_icon);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-gtk_status_icon_button_release (GtkStatusIcon *status_icon,
- GdkEventButton *event)
-{
- gboolean handled = FALSE;
- g_signal_emit (status_icon,
- status_icon_signals [BUTTON_RELEASE_EVENT_SIGNAL], 0,
- event, &handled);
- return handled;
-}
-
-#ifdef GDK_WINDOWING_X11
-
-static gboolean
-gtk_status_icon_scroll (GtkStatusIcon *status_icon,
- GdkEventScroll *event)
-{
- gboolean handled = FALSE;
- g_signal_emit (status_icon,
- status_icon_signals [SCROLL_EVENT_SIGNAL], 0,
- event, &handled);
- return handled;
-}
-
-static gboolean
-gtk_status_icon_query_tooltip (GtkStatusIcon *status_icon,
- gint x,
- gint y,
- gboolean keyboard_tip,
- GtkTooltip *tooltip)
-{
- gboolean handled = FALSE;
- g_signal_emit (status_icon,
- status_icon_signals [QUERY_TOOLTIP_SIGNAL], 0,
- x, y, keyboard_tip, tooltip, &handled);
- return handled;
-}
-
-#endif /* GDK_WINDOWING_X11 */
-
-static void
-gtk_status_icon_reset_image_data (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
- GtkImageType storage_type = gtk_image_definition_get_storage_type (priv->image_def);
-
- switch (storage_type)
- {
- case GTK_IMAGE_PIXBUF:
- g_object_notify (G_OBJECT (status_icon), "pixbuf");
- break;
- case GTK_IMAGE_STOCK:
- g_object_notify (G_OBJECT (status_icon), "stock");
- break;
- case GTK_IMAGE_ICON_NAME:
- g_object_notify (G_OBJECT (status_icon), "icon-name");
- break;
- case GTK_IMAGE_GICON:
- g_object_notify (G_OBJECT (status_icon), "gicon");
- break;
- case GTK_IMAGE_EMPTY:
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- gtk_image_definition_unref (priv->image_def);
- priv->image_def = gtk_image_definition_new_empty ();
- g_object_notify (G_OBJECT (status_icon), "storage-type");
-}
-
-static void
-gtk_status_icon_take_image (GtkStatusIcon *status_icon,
- GtkImageDefinition *def)
-{
- GtkStatusIconPrivate *priv = status_icon->priv;
-
- g_object_freeze_notify (G_OBJECT (status_icon));
-
- gtk_status_icon_reset_image_data (status_icon);
-
- g_object_notify (G_OBJECT (status_icon), "storage-type");
-
- if (def != NULL)
- {
- gtk_image_definition_unref (priv->image_def);
- priv->image_def = def;
- /* the icon size we pass here doesn't really matter, since
- * we force a pixel size before doing the actual rendering anyway.
- */
- switch (gtk_image_definition_get_storage_type (def))
- {
- case GTK_IMAGE_PIXBUF:
- g_object_notify (G_OBJECT (status_icon), "pixbuf");
- break;
- case GTK_IMAGE_STOCK:
- g_object_notify (G_OBJECT (status_icon), "stock");
- break;
- case GTK_IMAGE_ICON_NAME:
- g_object_notify (G_OBJECT (status_icon), "icon-name");
- break;
- case GTK_IMAGE_GICON:
- g_object_notify (G_OBJECT (status_icon), "gicon");
- break;
- default:
- g_warning ("Image type %u not handled by GtkStatusIcon",
- gtk_image_definition_get_storage_type (def));
- }
- }
-
- g_object_thaw_notify (G_OBJECT (status_icon));
-
- gtk_status_icon_update_image (status_icon);
-}
-
-/**
- * gtk_status_icon_set_from_pixbuf:
- * @status_icon: a #GtkStatusIcon
- * @pixbuf: (allow-none): a #GdkPixbuf or %NULL
- *
- * Makes @status_icon display @pixbuf.
- * See gtk_status_icon_new_from_pixbuf() for details.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-void
-gtk_status_icon_set_from_pixbuf (GtkStatusIcon *status_icon,
- GdkPixbuf *pixbuf)
-{
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
- g_return_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf));
-
- gtk_status_icon_take_image (status_icon,
- gtk_image_definition_new_pixbuf (pixbuf, 1));
-}
-
-/**
- * gtk_status_icon_set_from_file:
- * @status_icon: a #GtkStatusIcon
- * @filename: (type filename): a filename
- *
- * Makes @status_icon display the file @filename.
- * See gtk_status_icon_new_from_file() for details.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-void
-gtk_status_icon_set_from_file (GtkStatusIcon *status_icon,
- const gchar *filename)
-{
- GdkPixbuf *pixbuf;
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
- g_return_if_fail (filename != NULL);
-
- pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
-
- gtk_status_icon_set_from_pixbuf (status_icon, pixbuf);
-
- if (pixbuf)
- g_object_unref (pixbuf);
-}
-
-/**
- * gtk_status_icon_set_from_stock:
- * @status_icon: a #GtkStatusIcon
- * @stock_id: a stock icon id
- *
- * Makes @status_icon display the stock icon with the id @stock_id.
- * See gtk_status_icon_new_from_stock() for details.
- *
- * Since: 2.10
- *
- * Deprecated: 3.10: Use gtk_status_icon_set_from_icon_name() instead.
- **/
-void
-gtk_status_icon_set_from_stock (GtkStatusIcon *status_icon,
- const gchar *stock_id)
-{
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
- g_return_if_fail (stock_id != NULL);
-
- gtk_status_icon_take_image (status_icon,
- gtk_image_definition_new_stock (stock_id));
-}
-
-/**
- * gtk_status_icon_set_from_icon_name:
- * @status_icon: a #GtkStatusIcon
- * @icon_name: an icon name
- *
- * Makes @status_icon display the icon named @icon_name from the
- * current icon theme.
- * See gtk_status_icon_new_from_icon_name() for details.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-void
-gtk_status_icon_set_from_icon_name (GtkStatusIcon *status_icon,
- const gchar *icon_name)
-{
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
- g_return_if_fail (icon_name != NULL);
-
- gtk_status_icon_take_image (status_icon,
- gtk_image_definition_new_icon_name (icon_name));
-}
-
-/**
- * gtk_status_icon_set_from_gicon:
- * @status_icon: a #GtkStatusIcon
- * @icon: a GIcon
- *
- * Makes @status_icon display the #GIcon.
- * See gtk_status_icon_new_from_gicon() for details.
- *
- * Since: 2.14
- *
- * Deprecated: 3.14: Use notifications
- **/
-void
-gtk_status_icon_set_from_gicon (GtkStatusIcon *status_icon,
- GIcon *icon)
-{
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
- g_return_if_fail (icon != NULL);
-
- gtk_status_icon_take_image (status_icon,
- gtk_image_definition_new_gicon (icon));
-}
-
-/**
- * gtk_status_icon_get_storage_type:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the type of representation being used by the #GtkStatusIcon
- * to store image data. If the #GtkStatusIcon has no image data,
- * the return value will be %GTK_IMAGE_EMPTY.
- *
- * Returns: the image representation being used
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-GtkImageType
-gtk_status_icon_get_storage_type (GtkStatusIcon *status_icon)
-{
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), GTK_IMAGE_EMPTY);
-
- return gtk_image_definition_get_storage_type (status_icon->priv->image_def);
-}
-/**
- * gtk_status_icon_get_pixbuf:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the #GdkPixbuf being displayed by the #GtkStatusIcon.
- * The storage type of the status icon must be %GTK_IMAGE_EMPTY or
- * %GTK_IMAGE_PIXBUF (see gtk_status_icon_get_storage_type()).
- * The caller of this function does not own a reference to the
- * returned pixbuf.
- *
- * Returns: (nullable) (transfer none): the displayed pixbuf,
- * or %NULL if the image is empty.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-GdkPixbuf *
-gtk_status_icon_get_pixbuf (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
- return gtk_image_definition_get_pixbuf (priv->image_def);
-}
-
-/**
- * gtk_status_icon_get_stock:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the id of the stock icon being displayed by the #GtkStatusIcon.
- * The storage type of the status icon must be %GTK_IMAGE_EMPTY or
- * %GTK_IMAGE_STOCK (see gtk_status_icon_get_storage_type()).
- * The returned string is owned by the #GtkStatusIcon and should not
- * be freed or modified.
- *
- * Returns: (nullable): stock id of the displayed stock icon,
- * or %NULL if the image is empty.
- *
- * Since: 2.10
- *
- * Deprecated: 3.10: Use gtk_status_icon_get_icon_name() instead.
- **/
-const gchar *
-gtk_status_icon_get_stock (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
- return gtk_image_definition_get_stock (priv->image_def);
-}
-
-/**
- * gtk_status_icon_get_icon_name:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the name of the icon being displayed by the #GtkStatusIcon.
- * The storage type of the status icon must be %GTK_IMAGE_EMPTY or
- * %GTK_IMAGE_ICON_NAME (see gtk_status_icon_get_storage_type()).
- * The returned string is owned by the #GtkStatusIcon and should not
- * be freed or modified.
- *
- * Returns: (nullable): name of the displayed icon, or %NULL if the image is empty.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-const gchar *
-gtk_status_icon_get_icon_name (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
- return gtk_image_definition_get_icon_name (priv->image_def);
-}
-
-/**
- * gtk_status_icon_get_gicon:
- * @status_icon: a #GtkStatusIcon
- *
- * Retrieves the #GIcon being displayed by the #GtkStatusIcon.
- * The storage type of the status icon must be %GTK_IMAGE_EMPTY or
- * %GTK_IMAGE_GICON (see gtk_status_icon_get_storage_type()).
- * The caller of this function does not own a reference to the
- * returned #GIcon.
- *
- * If this function fails, @icon is left unchanged;
- *
- * Returns: (nullable) (transfer none): the displayed icon, or %NULL if the image is empty
- *
- * Since: 2.14
- *
- * Deprecated: 3.14: Use notifications
- **/
-GIcon *
-gtk_status_icon_get_gicon (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
- return gtk_image_definition_get_gicon (priv->image_def);
-}
-
-/**
- * gtk_status_icon_get_size:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the size in pixels that is available for the image.
- * Stock icons and named icons adapt their size automatically
- * if the size of the notification area changes. For other
- * storage types, the size-changed signal can be used to
- * react to size changes.
- *
- * Note that the returned size is only meaningful while the
- * status icon is embedded (see gtk_status_icon_is_embedded()).
- *
- * Returns: the size that is available for the image
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-gint
-gtk_status_icon_get_size (GtkStatusIcon *status_icon)
-{
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), 0);
-
- return status_icon->priv->size;
-}
-
-/**
- * gtk_status_icon_set_screen:
- * @status_icon: a #GtkStatusIcon
- * @screen: a #GdkScreen
- *
- * Sets the #GdkScreen where @status_icon is displayed; if
- * the icon is already mapped, it will be unmapped, and
- * then remapped on the new screen.
- *
- * Since: 2.12
- *
- * Deprecated: 3.14: Use notifications
- */
-void
-gtk_status_icon_set_screen (GtkStatusIcon *status_icon,
- GdkScreen *screen)
-{
- g_return_if_fail (GDK_IS_SCREEN (screen));
-
-#ifdef GDK_WINDOWING_X11
- if (status_icon->priv->tray_icon)
- gtk_window_set_screen (GTK_WINDOW (status_icon->priv->tray_icon), screen);
-#endif
-}
-
-/**
- * gtk_status_icon_get_screen:
- * @status_icon: a #GtkStatusIcon
- *
- * Returns the #GdkScreen associated with @status_icon.
- *
- * Returns: (transfer none): a #GdkScreen.
- *
- * Since: 2.12
- *
- * Deprecated: 3.14: Use notifications
- */
-GdkScreen *
-gtk_status_icon_get_screen (GtkStatusIcon *status_icon)
-{
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
-#ifdef GDK_WINDOWING_X11
- if (status_icon->priv->tray_icon)
- return gtk_window_get_screen (GTK_WINDOW (status_icon->priv->tray_icon));
- else
-#endif
- return gdk_screen_get_default ();
-}
-
-/**
- * gtk_status_icon_set_visible:
- * @status_icon: a #GtkStatusIcon
- * @visible: %TRUE to show the status icon, %FALSE to hide it
- *
- * Shows or hides a status icon.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-void
-gtk_status_icon_set_visible (GtkStatusIcon *status_icon,
- gboolean visible)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
- priv = status_icon->priv;
-
- visible = visible != FALSE;
-
- if (priv->visible != visible)
- {
- priv->visible = visible;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- {
- if (visible)
- gtk_widget_show (priv->tray_icon);
- else if (gtk_widget_get_realized (priv->tray_icon))
- {
- gtk_widget_hide (priv->tray_icon);
- gtk_widget_unrealize (priv->tray_icon);
- }
- }
-#endif
-#ifdef GDK_WINDOWING_WIN32
- if (priv->nid.hWnd != NULL)
- {
- if (visible)
- Shell_NotifyIconW (NIM_ADD, &priv->nid);
- else
- Shell_NotifyIconW (NIM_DELETE, &priv->nid);
- }
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- QUARTZ_POOL_ALLOC;
- [priv->status_item setVisible:visible];
- QUARTZ_POOL_RELEASE;
-#endif
- g_object_notify (G_OBJECT (status_icon), "visible");
- }
-}
-
-/**
- * gtk_status_icon_get_visible:
- * @status_icon: a #GtkStatusIcon
- *
- * Returns whether the status icon is visible or not.
- * Note that being visible does not guarantee that
- * the user can actually see the icon, see also
- * gtk_status_icon_is_embedded().
- *
- * Returns: %TRUE if the status icon is visible
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-gboolean
-gtk_status_icon_get_visible (GtkStatusIcon *status_icon)
-{
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), FALSE);
-
- return status_icon->priv->visible;
-}
-
-/**
- * gtk_status_icon_is_embedded:
- * @status_icon: a #GtkStatusIcon
- *
- * Returns whether the status icon is embedded in a notification
- * area.
- *
- * Returns: %TRUE if the status icon is embedded in
- * a notification area.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-gboolean
-gtk_status_icon_is_embedded (GtkStatusIcon *status_icon)
-{
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), FALSE);
-
-#ifdef GDK_WINDOWING_X11
- if (status_icon->priv->tray_icon &&
- gtk_plug_get_embedded (GTK_PLUG (status_icon->priv->tray_icon)))
- return TRUE;
- else
- return FALSE;
-#endif
-#ifdef GDK_WINDOWING_WIN32
- return TRUE;
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- return TRUE;
-#endif
-}
-
-/**
- * gtk_status_icon_position_menu:
- * @menu: the #GtkMenu
- * @x: (inout): return location for the x position
- * @y: (inout): return location for the y position
- * @push_in: (out): whether the first menu item should be offset
- * (pushed in) to be aligned with the menu popup position
- * (only useful for GtkOptionMenu).
- * @user_data: (type GtkStatusIcon): the status icon to position the menu on
- *
- * Menu positioning function to use with gtk_menu_popup()
- * to position @menu aligned to the status icon @user_data.
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- **/
-void
-gtk_status_icon_position_menu (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- gpointer user_data)
-{
-#ifdef GDK_WINDOWING_X11
- GtkStatusIcon *status_icon = GTK_STATUS_ICON (user_data);
- GtkStatusIconPrivate *priv = status_icon->priv;
- GtkAllocation allocation;
- GtkTrayIcon *tray_icon;
- GtkWidget *widget;
- GdkScreen *screen;
- GtkTextDirection direction;
- GtkRequisition menu_req;
- GdkRectangle monitor;
- GdkWindow *window;
- gint monitor_num, height, width, xoffset, yoffset;
-
- g_return_if_fail (GTK_IS_MENU (menu));
- g_return_if_fail (GTK_IS_STATUS_ICON (user_data));
-
- if (priv->tray_icon == NULL)
- {
- *x = 0;
- *y = 0;
- return;
- }
-
- tray_icon = GTK_TRAY_ICON (priv->tray_icon);
- widget = priv->tray_icon;
-
- direction = gtk_widget_get_direction (widget);
-
- screen = gtk_widget_get_screen (widget);
- gtk_menu_set_screen (menu, screen);
-
- window = gtk_widget_get_window (widget);
- monitor_num = gdk_screen_get_monitor_at_window (screen, window);
- if (monitor_num < 0)
- monitor_num = 0;
- gtk_menu_set_monitor (menu, monitor_num);
-
- gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
- gdk_window_get_origin (window, x, y);
-
- menu_req.width = gtk_widget_get_allocated_width (GTK_WIDGET (menu));
- menu_req.height = gtk_widget_get_allocated_height (GTK_WIDGET (menu));
-
- gtk_widget_get_allocation (widget, &allocation);
- if (_gtk_tray_icon_get_orientation (tray_icon) == GTK_ORIENTATION_VERTICAL)
- {
- width = 0;
- height = allocation.height;
- xoffset = allocation.width;
- yoffset = 0;
- }
- else
- {
- width = allocation.width;
- height = 0;
- xoffset = 0;
- yoffset = allocation.height;
- }
-
- if (direction == GTK_TEXT_DIR_RTL)
- {
- if ((*x - (menu_req.width - width)) >= monitor.x)
- *x -= menu_req.width - width;
- else if ((*x + xoffset + menu_req.width) < (monitor.x + monitor.width))
- *x += xoffset;
- else if ((monitor.x + monitor.width - (*x + xoffset)) < *x)
- *x -= menu_req.width - width;
- else
- *x += xoffset;
- }
- else
- {
- if ((*x + xoffset + menu_req.width) < (monitor.x + monitor.width))
- *x += xoffset;
- else if ((*x - (menu_req.width - width)) >= monitor.x)
- *x -= menu_req.width - width;
- else if ((monitor.x + monitor.width - (*x + xoffset)) > *x)
- *x += xoffset;
- else
- *x -= menu_req.width - width;
- }
-
- if ((*y + yoffset + menu_req.height) < (monitor.y + monitor.height))
- *y += yoffset;
- else if ((*y - (menu_req.height - height)) >= monitor.y)
- *y -= menu_req.height - height;
- else if (monitor.y + monitor.height - (*y + yoffset) > *y)
- *y += yoffset;
- else
- *y -= menu_req.height - height;
-
- *push_in = FALSE;
-#endif /* GDK_WINDOWING_X11 */
-
-#ifdef GDK_WINDOWING_WIN32
- GtkStatusIcon *status_icon;
- GtkStatusIconPrivate *priv;
- GtkRequisition menu_req;
-
- g_return_if_fail (GTK_IS_MENU (menu));
- g_return_if_fail (GTK_IS_STATUS_ICON (user_data));
-
- status_icon = GTK_STATUS_ICON (user_data);
- priv = status_icon->priv;
-
- gtk_widget_get_preferred_size (GTK_WIDGET (menu), &menu_req, NULL);
-
- *x = priv->last_click_x;
- *y = priv->taskbar_top - menu_req.height;
-
- *push_in = TRUE;
-#endif
-}
-
-/**
- * gtk_status_icon_get_geometry:
- * @status_icon: a #GtkStatusIcon
- * @screen: (out) (transfer none) (allow-none): return location for
- * the screen, or %NULL if the information is not needed
- * @area: (out) (allow-none): return location for the area occupied by
- * the status icon, or %NULL
- * @orientation: (out) (allow-none): return location for the
- * orientation of the panel in which the status icon is embedded,
- * or %NULL. A panel at the top or bottom of the screen is
- * horizontal, a panel at the left or right is vertical.
- *
- * Obtains information about the location of the status icon
- * on screen. This information can be used to e.g. position
- * popups like notification bubbles.
- *
- * See gtk_status_icon_position_menu() for a more convenient
- * alternative for positioning menus.
- *
- * Note that some platforms do not allow GTK+ to provide
- * this information, and even on platforms that do allow it,
- * the information is not reliable unless the status icon
- * is embedded in a notification area, see
- * gtk_status_icon_is_embedded().
- *
- * Returns: %TRUE if the location information has
- * been filled in
- *
- * Since: 2.10
- *
- * Deprecated: 3.14: Use notifications
- */
-gboolean
-gtk_status_icon_get_geometry (GtkStatusIcon *status_icon,
- GdkScreen **screen,
- GdkRectangle *area,
- GtkOrientation *orientation)
-{
-#ifdef GDK_WINDOWING_X11
- GtkStatusIconPrivate *priv = status_icon->priv;
- GtkAllocation allocation;
- GtkWidget *widget;
- gint x, y;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), FALSE);
-
- if (priv->tray_icon == NULL)
- return FALSE;
-
- widget = priv->tray_icon;
-
- if (screen)
- *screen = gtk_widget_get_screen (widget);
-
- if (area)
- {
- gdk_window_get_origin (gtk_widget_get_window (widget),
- &x, &y);
-
- gtk_widget_get_allocation (widget, &allocation);
- area->x = x;
- area->y = y;
- area->width = allocation.width;
- area->height = allocation.height;
- }
-
- if (orientation)
- *orientation = _gtk_tray_icon_get_orientation (GTK_TRAY_ICON (widget));
-
- return TRUE;
-#else
- return FALSE;
-#endif /* GDK_WINDOWING_X11 */
-}
-
-/**
- * gtk_status_icon_set_has_tooltip:
- * @status_icon: a #GtkStatusIcon
- * @has_tooltip: whether or not @status_icon has a tooltip
- *
- * Sets the has-tooltip property on @status_icon to @has_tooltip.
- * See #GtkStatusIcon:has-tooltip for more information.
- *
- * Since: 2.16
- *
- * Deprecated: 3.14: Use notifications
- */
-void
-gtk_status_icon_set_has_tooltip (GtkStatusIcon *status_icon,
- gboolean has_tooltip)
-{
- GtkStatusIconPrivate *priv;
- gboolean changed = FALSE;
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- {
- if (gtk_widget_get_has_tooltip (priv->tray_icon) != has_tooltip)
- {
- gtk_widget_set_has_tooltip (priv->tray_icon, has_tooltip);
- changed = TRUE;
- }
- }
-#endif
-#ifdef GDK_WINDOWING_WIN32
- changed = TRUE;
- if (!has_tooltip && priv->tooltip_text)
- gtk_status_icon_set_tooltip_text (status_icon, NULL);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- changed = TRUE;
- if (!has_tooltip && priv->tooltip_text)
- gtk_status_icon_set_tooltip_text (status_icon, NULL);
-#endif
-
- if (changed)
- g_object_notify (G_OBJECT (status_icon), "has-tooltip");
-}
-
-/**
- * gtk_status_icon_get_has_tooltip:
- * @status_icon: a #GtkStatusIcon
- *
- * Returns the current value of the has-tooltip property.
- * See #GtkStatusIcon:has-tooltip for more information.
- *
- * Returns: current value of has-tooltip on @status_icon.
- *
- * Since: 2.16
- *
- * Deprecated: 3.14: Use notifications
- */
-gboolean
-gtk_status_icon_get_has_tooltip (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
- gboolean has_tooltip = FALSE;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), FALSE);
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- has_tooltip = gtk_widget_get_has_tooltip (priv->tray_icon);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- has_tooltip = (priv->tooltip_text != NULL);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- has_tooltip = (priv->tooltip_text != NULL);
-#endif
-
- return has_tooltip;
-}
-
-/**
- * gtk_status_icon_set_tooltip_text:
- * @status_icon: a #GtkStatusIcon
- * @text: the contents of the tooltip for @status_icon
- *
- * Sets @text as the contents of the tooltip.
- *
- * This function will take care of setting #GtkStatusIcon:has-tooltip to
- * %TRUE and of the default handler for the #GtkStatusIcon::query-tooltip
- * signal.
- *
- * See also the #GtkStatusIcon:tooltip-text property and
- * gtk_tooltip_set_text().
- *
- * Since: 2.16
- *
- * Deprecated: 3.14: Use notifications
- */
-void
-gtk_status_icon_set_tooltip_text (GtkStatusIcon *status_icon,
- const gchar *text)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- gtk_widget_set_tooltip_text (priv->tray_icon, text);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- if (text == NULL)
- priv->nid.uFlags &= ~NIF_TIP;
- else
- {
- WCHAR *wcs = g_utf8_to_utf16 (text, -1, NULL, NULL, NULL);
-
- priv->nid.uFlags |= NIF_TIP;
- wcsncpy (priv->nid.szTip, wcs, G_N_ELEMENTS (priv->nid.szTip) - 1);
- priv->nid.szTip[G_N_ELEMENTS (priv->nid.szTip) - 1] = 0;
- g_free (wcs);
- }
- if (priv->nid.hWnd != NULL && priv->visible)
- if (!Shell_NotifyIconW (NIM_MODIFY, &priv->nid))
- g_warning (G_STRLOC ": Shell_NotifyIconW(NIM_MODIFY) failed");
-
- g_free (priv->tooltip_text);
- priv->tooltip_text = g_strdup (text);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- QUARTZ_POOL_ALLOC;
- [priv->status_item setToolTip:text];
- QUARTZ_POOL_RELEASE;
-
- g_free (priv->tooltip_text);
- priv->tooltip_text = g_strdup (text);
-#endif
-}
-
-/**
- * gtk_status_icon_get_tooltip_text:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the contents of the tooltip for @status_icon.
- *
- * Returns: (nullable): the tooltip text, or %NULL. You should free the
- * returned string with g_free() when done.
- *
- * Since: 2.16
- *
- * Deprecated: 3.14: Use notifications
- */
-gchar *
-gtk_status_icon_get_tooltip_text (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
- gchar *tooltip_text = NULL;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- tooltip_text = gtk_widget_get_tooltip_text (priv->tray_icon);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- if (priv->tooltip_text)
- tooltip_text = g_strdup (priv->tooltip_text);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- if (priv->tooltip_text)
- tooltip_text = g_strdup (priv->tooltip_text);
-#endif
-
- return tooltip_text;
-}
-
-/**
- * gtk_status_icon_set_tooltip_markup:
- * @status_icon: a #GtkStatusIcon
- * @markup: (allow-none): the contents of the tooltip for @status_icon, or %NULL
- *
- * Sets @markup as the contents of the tooltip, which is marked up with
- * the [Pango text markup language][PangoMarkupFormat].
- *
- * This function will take care of setting #GtkStatusIcon:has-tooltip to %TRUE
- * and of the default handler for the #GtkStatusIcon::query-tooltip signal.
- *
- * See also the #GtkStatusIcon:tooltip-markup property and
- * gtk_tooltip_set_markup().
- *
- * Since: 2.16
- *
- * Deprecated: 3.14: Use notifications
- */
-void
-gtk_status_icon_set_tooltip_markup (GtkStatusIcon *status_icon,
- const gchar *markup)
-{
-#ifdef GDK_WINDOWING_X11
- GtkStatusIconPrivate *priv;
-#endif
-#if defined (GDK_WINDOWING_WIN32) || defined (GDK_WINDOWING_QUARTZ)
- gchar *text = NULL;
-#endif
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
-#ifdef GDK_WINDOWING_X11
- priv = status_icon->priv;
-
- if (priv->tray_icon)
- gtk_widget_set_tooltip_markup (priv->tray_icon, markup);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- if (markup)
- pango_parse_markup (markup, -1, 0, NULL, &text, NULL, NULL);
- gtk_status_icon_set_tooltip_text (status_icon, text);
- g_free (text);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- if (markup)
- pango_parse_markup (markup, -1, 0, NULL, &text, NULL, NULL);
- gtk_status_icon_set_tooltip_text (status_icon, text);
- g_free (text);
-#endif
-}
-
-/**
- * gtk_status_icon_get_tooltip_markup:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the contents of the tooltip for @status_icon.
- *
- * Returns: (nullable): the tooltip text, or %NULL. You should free the
- * returned string with g_free() when done.
- *
- * Since: 2.16
- *
- * Deprecated: 3.14: Use notifications
- */
-gchar *
-gtk_status_icon_get_tooltip_markup (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
- gchar *markup = NULL;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- markup = gtk_widget_get_tooltip_markup (priv->tray_icon);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- if (priv->tooltip_text)
- markup = g_markup_escape_text (priv->tooltip_text, -1);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- if (priv->tooltip_text)
- markup = g_markup_escape_text (priv->tooltip_text, -1);
-#endif
-
- return markup;
-}
-
-/**
- * gtk_status_icon_get_x11_window_id:
- * @status_icon: a #GtkStatusIcon
- *
- * This function is only useful on the X11/freedesktop.org platform.
- * It returns a window ID for the widget in the underlying
- * status icon implementation. This is useful for the Galago
- * notification service, which can send a window ID in the protocol
- * in order for the server to position notification windows
- * pointing to a status icon reliably.
- *
- * This function is not intended for other use cases which are
- * more likely to be met by one of the non-X11 specific methods, such
- * as gtk_status_icon_position_menu().
- *
- * Returns: An 32 bit unsigned integer identifier for the
- * underlying X11 Window
- *
- * Since: 2.14
- *
- * Deprecated: 3.14: Use notifications
- */
-guint32
-gtk_status_icon_get_x11_window_id (GtkStatusIcon *status_icon)
-{
-#ifdef GDK_WINDOWING_X11
- if (status_icon->priv->tray_icon)
- {
- gtk_widget_realize (GTK_WIDGET (status_icon->priv->tray_icon));
- return GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (status_icon->priv->tray_icon)));
- }
- else
-#endif
- return 0;
-}
-
-/**
- * gtk_status_icon_set_title:
- * @status_icon: a #GtkStatusIcon
- * @title: the title
- *
- * Sets the title of this tray icon.
- * This should be a short, human-readable, localized string
- * describing the tray icon. It may be used by tools like screen
- * readers to render the tray icon.
- *
- * Since: 2.18
- *
- * Deprecated: 3.14: Use notifications
- */
-void
-gtk_status_icon_set_title (GtkStatusIcon *status_icon,
- const gchar *title)
-{
- GtkStatusIconPrivate *priv;
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- gtk_window_set_title (GTK_WINDOW (priv->tray_icon), title);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- g_free (priv->title);
- priv->title = g_strdup (title);
-#endif
-#ifdef GDK_WINDOWING_WIN32
- g_free (priv->title);
- priv->title = g_strdup (title);
-#endif
-
- g_object_notify (G_OBJECT (status_icon), "title");
-}
-
-/**
- * gtk_status_icon_get_title:
- * @status_icon: a #GtkStatusIcon
- *
- * Gets the title of this tray icon. See gtk_status_icon_set_title().
- *
- * Returns: the title of the status icon
- *
- * Since: 2.18
- *
- * Deprecated: 3.14: Use notifications
- */
-const gchar *
-gtk_status_icon_get_title (GtkStatusIcon *status_icon)
-{
- GtkStatusIconPrivate *priv;
- const gchar *title = NULL;
-
- g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
-
- priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
- if (priv->tray_icon)
- title = gtk_window_get_title (GTK_WINDOW (priv->tray_icon));
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
- title = priv->title;
-#endif
-#ifdef GDK_WINDOWING_WIN32
- title = priv->title;
-#endif
-
- return title;
-}
-
-
-/**
- * gtk_status_icon_set_name:
- * @status_icon: a #GtkStatusIcon
- * @name: the name
- *
- * Sets the name of this tray icon.
- * This should be a string identifying this icon. It is may be
- * used for sorting the icons in the tray and will not be shown to
- * the user.
- *
- * Since: 2.20
- *
- * Deprecated: 3.14: Use notifications
- */
-void
-gtk_status_icon_set_name (GtkStatusIcon *status_icon,
- const gchar *name)
-{
-#ifdef GDK_WINDOWING_X11
- GtkStatusIconPrivate *priv;
-#endif
-
- g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
-#ifdef GDK_WINDOWING_X11
- priv = status_icon->priv;
-
- if (priv->tray_icon)
- {
- if (gtk_widget_get_realized (priv->tray_icon))
- {
- /* gtk_window_set_wmclass() only operates on non-realized windows,
- * so temporarily unrealize the tray here
- */
- gtk_widget_hide (priv->tray_icon);
- gtk_widget_unrealize (priv->tray_icon);
- gtk_window_set_wmclass (GTK_WINDOW (priv->tray_icon), name, name);
- gtk_widget_show (priv->tray_icon);
- }
- else
- gtk_window_set_wmclass (GTK_WINDOW (priv->tray_icon), name, name);
- }
-#endif
-}
diff --git a/gtk/deprecated/gtkstatusicon.h b/gtk/deprecated/gtkstatusicon.h
deleted file mode 100644
index 6b1518ca9e..0000000000
--- a/gtk/deprecated/gtkstatusicon.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* gtkstatusicon.h:
- *
- * Copyright (C) 2003 Sun Microsystems, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- * Mark McLoughlin <mark@skynet.ie>
- */
-
-#ifndef __GTK_STATUS_ICON_H__
-#define __GTK_STATUS_ICON_H__
-
-#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
-#error "Only <gtk/gtk.h> can be included directly."
-#endif
-
-#include <gtk/gtkimage.h>
-#include <gtk/gtkmenu.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_STATUS_ICON (gtk_status_icon_get_type ())
-#define GTK_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_STATUS_ICON, GtkStatusIcon))
-#define GTK_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_STATUS_ICON, GtkStatusIconClass))
-#define GTK_IS_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_STATUS_ICON))
-#define GTK_IS_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_STATUS_ICON))
-#define GTK_STATUS_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_STATUS_ICON, GtkStatusIconClass))
-
-typedef struct _GtkStatusIcon GtkStatusIcon;
-typedef struct _GtkStatusIconClass GtkStatusIconClass;
-typedef struct _GtkStatusIconPrivate GtkStatusIconPrivate;
-
-struct _GtkStatusIcon
-{
- GObject parent_instance;
-
- GtkStatusIconPrivate *priv;
-};
-
-struct _GtkStatusIconClass
-{
- GObjectClass parent_class;
-
- void (* activate) (GtkStatusIcon *status_icon);
- void (* popup_menu) (GtkStatusIcon *status_icon,
- guint button,
- guint32 activate_time);
- gboolean (* size_changed) (GtkStatusIcon *status_icon,
- gint size);
- gboolean (* button_press_event) (GtkStatusIcon *status_icon,
- GdkEventButton *event);
- gboolean (* button_release_event) (GtkStatusIcon *status_icon,
- GdkEventButton *event);
- gboolean (* scroll_event) (GtkStatusIcon *status_icon,
- GdkEventScroll *event);
- gboolean (* query_tooltip) (GtkStatusIcon *status_icon,
- gint x,
- gint y,
- gboolean keyboard_mode,
- GtkTooltip *tooltip);
-
- void (*__gtk_reserved1);
- void (*__gtk_reserved2);
- void (*__gtk_reserved3);
- void (*__gtk_reserved4);
-};
-
-GDK_AVAILABLE_IN_ALL
-GType gtk_status_icon_get_type (void) G_GNUC_CONST;
-
-GDK_DEPRECATED_IN_3_14
-GtkStatusIcon *gtk_status_icon_new (void);
-GDK_DEPRECATED_IN_3_14
-GtkStatusIcon *gtk_status_icon_new_from_pixbuf (GdkPixbuf *pixbuf);
-GDK_DEPRECATED_IN_3_14
-GtkStatusIcon *gtk_status_icon_new_from_file (const gchar *filename);
-GDK_DEPRECATED_IN_3_10_FOR(gtk_status_icon_new_from_icon_name)
-GtkStatusIcon *gtk_status_icon_new_from_stock (const gchar *stock_id);
-GDK_DEPRECATED_IN_3_14
-GtkStatusIcon *gtk_status_icon_new_from_icon_name (const gchar *icon_name);
-GDK_DEPRECATED_IN_3_14
-GtkStatusIcon *gtk_status_icon_new_from_gicon (GIcon *icon);
-
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_from_pixbuf (GtkStatusIcon *status_icon,
- GdkPixbuf *pixbuf);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_from_file (GtkStatusIcon *status_icon,
- const gchar *filename);
-GDK_DEPRECATED_IN_3_10_FOR(gtk_status_icon_set_from_icon_name)
-void gtk_status_icon_set_from_stock (GtkStatusIcon *status_icon,
- const gchar *stock_id);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_from_icon_name (GtkStatusIcon *status_icon,
- const gchar *icon_name);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_from_gicon (GtkStatusIcon *status_icon,
- GIcon *icon);
-
-GDK_DEPRECATED_IN_3_14
-GtkImageType gtk_status_icon_get_storage_type (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-GdkPixbuf *gtk_status_icon_get_pixbuf (GtkStatusIcon *status_icon);
-GDK_DEPRECATED_IN_3_10_FOR(gtk_status_icon_get_icon_name)
-const gchar * gtk_status_icon_get_stock (GtkStatusIcon *status_icon);
-GDK_DEPRECATED_IN_3_14
-const gchar * gtk_status_icon_get_icon_name (GtkStatusIcon *status_icon);
-GDK_DEPRECATED_IN_3_14
-GIcon *gtk_status_icon_get_gicon (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-gint gtk_status_icon_get_size (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_screen (GtkStatusIcon *status_icon,
- GdkScreen *screen);
-GDK_DEPRECATED_IN_3_14
-GdkScreen *gtk_status_icon_get_screen (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_has_tooltip (GtkStatusIcon *status_icon,
- gboolean has_tooltip);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_tooltip_text (GtkStatusIcon *status_icon,
- const gchar *text);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_tooltip_markup (GtkStatusIcon *status_icon,
- const gchar *markup);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_title (GtkStatusIcon *status_icon,
- const gchar *title);
-GDK_DEPRECATED_IN_3_14
-const gchar * gtk_status_icon_get_title (GtkStatusIcon *status_icon);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_name (GtkStatusIcon *status_icon,
- const gchar *name);
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_set_visible (GtkStatusIcon *status_icon,
- gboolean visible);
-GDK_DEPRECATED_IN_3_14
-gboolean gtk_status_icon_get_visible (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-gboolean gtk_status_icon_is_embedded (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-void gtk_status_icon_position_menu (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- gpointer user_data);
-GDK_DEPRECATED_IN_3_14
-gboolean gtk_status_icon_get_geometry (GtkStatusIcon *status_icon,
- GdkScreen **screen,
- GdkRectangle *area,
- GtkOrientation *orientation);
-GDK_DEPRECATED_IN_3_14
-gboolean gtk_status_icon_get_has_tooltip (GtkStatusIcon *status_icon);
-GDK_DEPRECATED_IN_3_14
-gchar *gtk_status_icon_get_tooltip_text (GtkStatusIcon *status_icon);
-GDK_DEPRECATED_IN_3_14
-gchar *gtk_status_icon_get_tooltip_markup (GtkStatusIcon *status_icon);
-
-GDK_DEPRECATED_IN_3_14
-guint32 gtk_status_icon_get_x11_window_id (GtkStatusIcon *status_icon);
-
-G_END_DECLS
-
-#endif /* __GTK_STATUS_ICON_H__ */
diff --git a/gtk/deprecated/gtktrayicon-x11.c b/gtk/deprecated/gtktrayicon-x11.c
deleted file mode 100644
index 556b9da696..0000000000
--- a/gtk/deprecated/gtktrayicon-x11.c
+++ /dev/null
@@ -1,1100 +0,0 @@
-/* gtktrayicon.c
- * Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * This is an implementation of the freedesktop.org “system tray” spec,
- * http://www.freedesktop.org/wiki/Standards/systemtray-spec
- */
-
-#include "config.h"
-
-#include <math.h>
-#include <string.h>
-
-#include "x11/gdkx.h"
-#include <X11/Xatom.h>
-#include <cairo-xlib.h>
-
-#include "gtkintl.h"
-#include "gtkprivate.h"
-#include "gtktrayicon.h"
-#include "gtktestutils.h"
-#include "gtkdebug.h"
-#include "gtktypebuiltins.h"
-#include "gtkrender.h"
-
-#define SYSTEM_TRAY_REQUEST_DOCK 0
-#define SYSTEM_TRAY_BEGIN_MESSAGE 1
-#define SYSTEM_TRAY_CANCEL_MESSAGE 2
-
-#define SYSTEM_TRAY_ORIENTATION_HORZ 0
-#define SYSTEM_TRAY_ORIENTATION_VERT 1
-
-enum {
- PROP_0,
- PROP_ORIENTATION,
- PROP_FG_COLOR,
- PROP_ERROR_COLOR,
- PROP_WARNING_COLOR,
- PROP_SUCCESS_COLOR,
- PROP_PADDING,
- PROP_ICON_SIZE
-};
-
-struct _GtkTrayIconPrivate
-{
- guint stamp;
-
- Atom selection_atom;
- Atom manager_atom;
- Atom system_tray_opcode_atom;
- Atom orientation_atom;
- Atom visual_atom;
- Atom colors_atom;
- Atom padding_atom;
- Atom icon_size_atom;
- Window manager_window;
- GdkVisual *manager_visual;
- gboolean manager_visual_rgba;
-
- GtkOrientation orientation;
- GdkRGBA fg_color;
- GdkRGBA error_color;
- GdkRGBA warning_color;
- GdkRGBA success_color;
- gint padding;
- gint icon_size;
-};
-
-static void gtk_tray_icon_constructed (GObject *object);
-static void gtk_tray_icon_dispose (GObject *object);
-
-static void gtk_tray_icon_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-
-static void gtk_tray_icon_realize (GtkWidget *widget);
-static void gtk_tray_icon_style_updated (GtkWidget *widget);
-static gboolean gtk_tray_icon_delete (GtkWidget *widget,
- GdkEventAny *event);
-static gboolean gtk_tray_icon_draw (GtkWidget *widget,
- cairo_t *cr);
-
-static void gtk_tray_icon_clear_manager_window (GtkTrayIcon *icon);
-static void gtk_tray_icon_update_manager_window (GtkTrayIcon *icon);
-static void gtk_tray_icon_manager_window_destroyed (GtkTrayIcon *icon);
-
-static GdkFilterReturn gtk_tray_icon_manager_filter (GdkXEvent *xevent,
- GdkEvent *event,
- gpointer user_data);
-
-
-G_DEFINE_TYPE_WITH_PRIVATE (GtkTrayIcon, gtk_tray_icon, GTK_TYPE_PLUG)
-
-static void
-gtk_tray_icon_class_init (GtkTrayIconClass *class)
-{
- GObjectClass *gobject_class = (GObjectClass *)class;
- GtkWidgetClass *widget_class = (GtkWidgetClass *)class;
-
- gobject_class->get_property = gtk_tray_icon_get_property;
- gobject_class->constructed = gtk_tray_icon_constructed;
- gobject_class->dispose = gtk_tray_icon_dispose;
-
- widget_class->realize = gtk_tray_icon_realize;
- widget_class->style_updated = gtk_tray_icon_style_updated;
- widget_class->delete_event = gtk_tray_icon_delete;
- widget_class->draw = gtk_tray_icon_draw;
-
- g_object_class_install_property (gobject_class,
- PROP_ORIENTATION,
- g_param_spec_enum ("orientation",
- P_("Orientation"),
- P_("The orientation of the tray"),
- GTK_TYPE_ORIENTATION,
- GTK_ORIENTATION_HORIZONTAL,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_FG_COLOR,
- g_param_spec_boxed ("fg-color",
- P_("Foreground color"),
- P_("Foreground color for symbolic icons"),
- GDK_TYPE_RGBA,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_ERROR_COLOR,
- g_param_spec_boxed ("error-color",
- P_("Error color"),
- P_("Error color for symbolic icons"),
- GDK_TYPE_RGBA,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_WARNING_COLOR,
- g_param_spec_boxed ("warning-color",
- P_("Warning color"),
- P_("Warning color for symbolic icons"),
- GDK_TYPE_RGBA,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_SUCCESS_COLOR,
- g_param_spec_boxed ("success-color",
- P_("Success color"),
- P_("Success color for symbolic icons"),
- GDK_TYPE_RGBA,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_PADDING,
- g_param_spec_int ("padding",
- P_("Padding"),
- P_("Padding that should be put around icons in the tray"),
- 0,
- G_MAXINT,
- 0,
- GTK_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_ICON_SIZE,
- g_param_spec_int ("icon-size",
- P_("Icon Size"),
- P_("The pixel size that icons should be forced to, or zero"),
- 0,
- G_MAXINT,
- 0,
- GTK_PARAM_READABLE));
-}
-
-static void
-gtk_tray_icon_init (GtkTrayIcon *icon)
-{
- icon->priv = gtk_tray_icon_get_instance_private (icon);
- icon->priv->stamp = 1;
- icon->priv->orientation = GTK_ORIENTATION_HORIZONTAL;
- icon->priv->fg_color.red = 0.0;
- icon->priv->fg_color.green = 0.0;
- icon->priv->fg_color.blue = 0.0;
- icon->priv->fg_color.alpha = 1.0;
- icon->priv->error_color.red = 0.7968;
- icon->priv->error_color.green = 0.0;
- icon->priv->error_color.blue = 0.0;
- icon->priv->error_color.alpha = 1.0;
- icon->priv->warning_color.red = 0.9570;
- icon->priv->warning_color.green = 0.4726;
- icon->priv->warning_color.blue = 0.2421;
- icon->priv->warning_color.alpha = 1.0;
- icon->priv->success_color.red = 0.3047;
- icon->priv->success_color.green = 0.6016;
- icon->priv->success_color.blue = 0.0234;
- icon->priv->success_color.alpha = 1.0;
- icon->priv->padding = 0;
- icon->priv->icon_size = 0;
-
- gtk_widget_set_app_paintable (GTK_WIDGET (icon), TRUE);
- gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
-}
-
-static void
-gtk_tray_icon_constructed (GObject *object)
-{
- /* Do setup that depends on the screen; screen has been set at this point */
-
- GtkTrayIcon *icon = GTK_TRAY_ICON (object);
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (object));
- GdkWindow *root_window = gdk_screen_get_root_window (screen);
- GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (object));
- Display *xdisplay = gdk_x11_display_get_xdisplay (display);
- char buffer[256];
-
- g_snprintf (buffer, sizeof (buffer),
- "_NET_SYSTEM_TRAY_S%d",
- gdk_screen_get_number (screen));
-
- icon->priv->selection_atom = XInternAtom (xdisplay, buffer, False);
-
- icon->priv->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
-
- icon->priv->system_tray_opcode_atom = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_OPCODE",
- False);
-
- icon->priv->orientation_atom = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_ORIENTATION",
- False);
-
- icon->priv->visual_atom = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_VISUAL",
- False);
-
- icon->priv->colors_atom = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_COLORS",
- False);
-
- icon->priv->padding_atom = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_PADDING",
- False);
-
- icon->priv->icon_size_atom = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_ICON_SIZE",
- False);
-
- /* Add a root window filter so that we get changes on MANAGER */
- gdk_window_add_filter (root_window,
- gtk_tray_icon_manager_filter, icon);
-
- gtk_tray_icon_update_manager_window (icon);
-}
-
-static void
-gtk_tray_icon_clear_manager_window (GtkTrayIcon *icon)
-{
- GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (icon));
-
- if (icon->priv->manager_window != None)
- {
- GdkWindow *gdkwin;
-
- gdkwin = gdk_x11_window_lookup_for_display (display,
- icon->priv->manager_window);
-
- gdk_window_remove_filter (gdkwin, gtk_tray_icon_manager_filter, icon);
-
- icon->priv->manager_window = None;
- icon->priv->manager_visual = NULL;
- }
-}
-
-static void
-gtk_tray_icon_dispose (GObject *object)
-{
- GtkTrayIcon *icon = GTK_TRAY_ICON (object);
- GtkWidget *widget = GTK_WIDGET (object);
- GdkWindow *root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
-
- gtk_tray_icon_clear_manager_window (icon);
-
- gdk_window_remove_filter (root_window, gtk_tray_icon_manager_filter, icon);
-
- G_OBJECT_CLASS (gtk_tray_icon_parent_class)->dispose (object);
-}
-
-static void
-gtk_tray_icon_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GtkTrayIcon *icon = GTK_TRAY_ICON (object);
-
- switch (prop_id)
- {
- case PROP_ORIENTATION:
- g_value_set_enum (value, icon->priv->orientation);
- break;
- case PROP_FG_COLOR:
- g_value_set_boxed (value, &icon->priv->fg_color);
- break;
- case PROP_ERROR_COLOR:
- g_value_set_boxed (value, &icon->priv->error_color);
- break;
- case PROP_WARNING_COLOR:
- g_value_set_boxed (value, &icon->priv->warning_color);
- break;
- case PROP_SUCCESS_COLOR:
- g_value_set_boxed (value, &icon->priv->success_color);
- break;
- case PROP_PADDING:
- g_value_set_int (value, icon->priv->padding);
- break;
- case PROP_ICON_SIZE:
- g_value_set_int (value, icon->priv->icon_size);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-gtk_tray_icon_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- GtkTrayIcon *icon = GTK_TRAY_ICON (widget);
- GtkWidget *focus_child;
- GdkWindow *window;
- gint border_width;
- gboolean retval = FALSE;
- cairo_surface_t *target;
-
- window = gtk_widget_get_window (widget);
- target = cairo_get_group_target (cr);
-
- if (icon->priv->manager_visual_rgba ||
- cairo_surface_get_type (target) != CAIRO_SURFACE_TYPE_XLIB ||
- cairo_xlib_surface_get_drawable (target) != GDK_WINDOW_XID (window))
- {
- /* Clear to transparent */
- cairo_set_source_rgba (cr, 0, 0, 0, 0);
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_paint (cr);
- }
- else
- {
- GdkRectangle clip;
-
- if (gdk_cairo_get_clip_rectangle (cr, &clip))
- {
- /* Clear to parent-relative pixmap
- * We need to use direct X access here because GDK doesn't know about
- * the parent realtive pixmap. */
- cairo_surface_flush (target);
-
- XClearArea (GDK_WINDOW_XDISPLAY (window),
- GDK_WINDOW_XID (window),
- clip.x, clip.y,
- clip.width, clip.height,
- False);
- cairo_surface_mark_dirty_rectangle (target,
- clip.x, clip.y,
- clip.width, clip.height);
- }
- }
-
- if (GTK_WIDGET_CLASS (gtk_tray_icon_parent_class)->draw)
- retval = GTK_WIDGET_CLASS (gtk_tray_icon_parent_class)->draw (widget, cr);
-
- focus_child = gtk_container_get_focus_child (GTK_CONTAINER (widget));
- if (focus_child && gtk_widget_has_visible_focus (focus_child))
- {
- GtkStyleContext *context;
-
- border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
- context = gtk_widget_get_style_context (widget);
-
- gtk_render_focus (context, cr, border_width, border_width,
- gtk_widget_get_allocated_width (widget) - 2 * border_width,
- gtk_widget_get_allocated_height (widget) - 2 * border_width);
- }
-
- return retval;
-}
-
-static void
-gtk_tray_icon_get_orientation_property (GtkTrayIcon *icon)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
- GdkDisplay *display = gdk_screen_get_display (screen);
- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-
- Atom type;
- int format;
- union {
- gulong *prop;
- guchar *prop_ch;
- } prop = { NULL };
- gulong nitems;
- gulong bytes_after;
- int error, result;
-
- g_assert (icon->priv->manager_window != None);
-
- gdk_error_trap_push ();
- type = None;
- result = XGetWindowProperty (xdisplay,
- icon->priv->manager_window,
- icon->priv->orientation_atom,
- 0, G_MAXLONG, FALSE,
- XA_CARDINAL,
- &type, &format, &nitems,
- &bytes_after, &(prop.prop_ch));
- error = gdk_error_trap_pop ();
-
- if (error || result != Success)
- return;
-
- if (type == XA_CARDINAL && nitems == 1 && format == 32)
- {
- GtkOrientation orientation;
-
- orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
- GTK_ORIENTATION_HORIZONTAL :
- GTK_ORIENTATION_VERTICAL;
-
- if (icon->priv->orientation != orientation)
- {
- icon->priv->orientation = orientation;
-
- g_object_notify (G_OBJECT (icon), "orientation");
- }
- }
-
- if (type != None)
- XFree (prop.prop);
-}
-
-static void
-gtk_tray_icon_get_visual_property (GtkTrayIcon *icon)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
- GdkDisplay *display = gdk_screen_get_display (screen);
- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-
- Atom type;
- int format;
- union {
- gulong *prop;
- guchar *prop_ch;
- } prop = { NULL };
- gulong nitems;
- gulong bytes_after;
- int error, result;
-
- g_assert (icon->priv->manager_window != None);
-
- gdk_error_trap_push ();
- type = None;
- result = XGetWindowProperty (xdisplay,
- icon->priv->manager_window,
- icon->priv->visual_atom,
- 0, G_MAXLONG, FALSE,
- XA_VISUALID,
- &type, &format, &nitems,
- &bytes_after, &(prop.prop_ch));
- error = gdk_error_trap_pop ();
-
- if (!error && result == Success &&
- type == XA_VISUALID && nitems == 1 && format == 32)
- {
- VisualID visual_id;
- GdkVisual *visual;
- gint red_prec, green_prec, blue_prec;
-
- visual_id = prop.prop[0];
- visual = gdk_x11_screen_lookup_visual (screen, visual_id);
- gdk_visual_get_red_pixel_details (visual, NULL, NULL, &red_prec);
- gdk_visual_get_green_pixel_details (visual, NULL, NULL, &green_prec);
- gdk_visual_get_blue_pixel_details (visual, NULL, NULL, &blue_prec);
- icon->priv->manager_visual = visual;
- icon->priv->manager_visual_rgba =
- (red_prec + blue_prec + green_prec < gdk_visual_get_depth (visual));
- }
- else
- {
- icon->priv->manager_visual = NULL;
- icon->priv->manager_visual_rgba = FALSE;
- }
-
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- /* For the background-relative hack we use when we aren't
- * using a real RGBA visual, we can't be double-buffered
- */
- gtk_widget_set_double_buffered (GTK_WIDGET (icon), icon->priv->manager_visual_rgba);
-G_GNUC_END_IGNORE_DEPRECATIONS
-
- if (type != None)
- XFree (prop.prop);
-}
-
-static void
-gtk_tray_icon_get_colors_property (GtkTrayIcon *icon)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
- GdkDisplay *display = gdk_screen_get_display (screen);
- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-
- Atom type;
- int format;
- union {
- gulong *prop;
- guchar *prop_ch;
- } prop = { NULL };
- gulong nitems;
- gulong bytes_after;
- int error, result;
-
- g_assert (icon->priv->manager_window != None);
-
- gdk_error_trap_push ();
- type = None;
- result = XGetWindowProperty (xdisplay,
- icon->priv->manager_window,
- icon->priv->colors_atom,
- 0, G_MAXLONG, FALSE,
- XA_CARDINAL,
- &type, &format, &nitems,
- &bytes_after, &(prop.prop_ch));
- error = gdk_error_trap_pop ();
-
- if (error || result != Success)
- return;
-
- if (type == XA_CARDINAL && nitems == 12 && format == 32)
- {
- GdkRGBA color;
-
- color.alpha = 1.0;
- g_object_freeze_notify (G_OBJECT (icon));
-
- color.red = prop.prop[0] / 65535.0;
- color.green = prop.prop[1] / 65535.0;
- color.blue = prop.prop[2] / 65535.0;
-
- if (!gdk_rgba_equal (&icon->priv->fg_color, &color))
- {
- icon->priv->fg_color = color;
-
- g_object_notify (G_OBJECT (icon), "fg-color");
- }
-
- color.red = prop.prop[3] / 65535.0;
- color.green = prop.prop[4] / 65535.0;
- color.blue = prop.prop[5] / 65535.0;
-
- if (!gdk_rgba_equal (&icon->priv->error_color, &color))
- {
- icon->priv->error_color = color;
-
- g_object_notify (G_OBJECT (icon), "error-color");
- }
-
- color.red = prop.prop[6] / 65535.0;
- color.green = prop.prop[7] / 65535.0;
- color.blue = prop.prop[8] / 65535.0;
-
- if (!gdk_rgba_equal (&icon->priv->warning_color, &color))
- {
- icon->priv->warning_color = color;
-
- g_object_notify (G_OBJECT (icon), "warning-color");
- }
-
- color.red = prop.prop[9] / 65535.0;
- color.green = prop.prop[10] / 65535.0;
- color.blue = prop.prop[11] / 65535.0;
-
- if (!gdk_rgba_equal (&icon->priv->success_color, &color))
- {
- icon->priv->success_color = color;
-
- g_object_notify (G_OBJECT (icon), "success-color");
- }
-
- g_object_thaw_notify (G_OBJECT (icon));
- }
-
- if (type != None)
- XFree (prop.prop);
-}
-
-static void
-gtk_tray_icon_get_padding_property (GtkTrayIcon *icon)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
- GdkDisplay *display = gdk_screen_get_display (screen);
- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-
- Atom type;
- int format;
- union {
- gulong *prop;
- guchar *prop_ch;
- } prop = { NULL };
- gulong nitems;
- gulong bytes_after;
- int error, result;
-
- g_assert (icon->priv->manager_window != None);
-
- gdk_error_trap_push ();
- type = None;
- result = XGetWindowProperty (xdisplay,
- icon->priv->manager_window,
- icon->priv->padding_atom,
- 0, G_MAXLONG, FALSE,
- XA_CARDINAL,
- &type, &format, &nitems,
- &bytes_after, &(prop.prop_ch));
- error = gdk_error_trap_pop ();
-
- if (!error && result == Success &&
- type == XA_CARDINAL && nitems == 1 && format == 32)
- {
- gint padding;
-
- padding = prop.prop[0];
-
- if (icon->priv->padding != padding)
- {
- icon->priv->padding = padding;
-
- g_object_notify (G_OBJECT (icon), "padding");
- }
- }
-
- if (type != None)
- XFree (prop.prop);
-}
-
-static void
-gtk_tray_icon_get_icon_size_property (GtkTrayIcon *icon)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
- GdkDisplay *display = gdk_screen_get_display (screen);
- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-
- Atom type;
- int format;
- union {
- gulong *prop;
- guchar *prop_ch;
- } prop = { NULL };
- gulong nitems;
- gulong bytes_after;
- int error, result;
-
- g_assert (icon->priv->manager_window != None);
-
- gdk_error_trap_push ();
- type = None;
- result = XGetWindowProperty (xdisplay,
- icon->priv->manager_window,
- icon->priv->icon_size_atom,
- 0, G_MAXLONG, FALSE,
- XA_CARDINAL,
- &type, &format, &nitems,
- &bytes_after, &(prop.prop_ch));
- error = gdk_error_trap_pop ();
-
- if (!error && result == Success &&
- type == XA_CARDINAL && nitems == 1 && format == 32)
- {
- gint icon_size;
-
- icon_size = prop.prop[0];
-
- if (icon->priv->icon_size != icon_size)
- {
- icon->priv->icon_size = icon_size;
-
- g_object_notify (G_OBJECT (icon), "icon-size");
- }
- }
-
- if (type != None)
- XFree (prop.prop);
-}
-
-static GdkFilterReturn
-gtk_tray_icon_manager_filter (GdkXEvent *xevent,
- GdkEvent *event,
- gpointer user_data)
-{
- GtkTrayIcon *icon = user_data;
- XEvent *xev = (XEvent *)xevent;
-
- if (xev->xany.type == ClientMessage &&
- xev->xclient.message_type == icon->priv->manager_atom &&
- xev->xclient.data.l[1] == icon->priv->selection_atom)
- {
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: tray manager appeared", icon));
-
- gtk_tray_icon_update_manager_window (icon);
- }
- else if (xev->xany.window == icon->priv->manager_window)
- {
- if (xev->xany.type == PropertyNotify &&
- xev->xproperty.atom == icon->priv->orientation_atom)
- {
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: got PropertyNotify on manager window for orientation atom", icon));
-
- gtk_tray_icon_get_orientation_property (icon);
- }
- else if (xev->xany.type == PropertyNotify &&
- xev->xproperty.atom == icon->priv->colors_atom)
- {
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: got PropertyNotify on manager window for colors atom", icon));
-
- gtk_tray_icon_get_colors_property (icon);
- }
- else if (xev->xany.type == PropertyNotify &&
- xev->xproperty.atom == icon->priv->padding_atom)
- {
- gtk_tray_icon_get_padding_property (icon);
- }
- else if (xev->xany.type == PropertyNotify &&
- xev->xproperty.atom == icon->priv->icon_size_atom)
- {
- gtk_tray_icon_get_icon_size_property (icon);
- }
- else if (xev->xany.type == DestroyNotify)
- {
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: got DestroyNotify for manager window", icon));
-
- gtk_tray_icon_manager_window_destroyed (icon);
- }
- else
- {
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: got other message on manager window", icon));
- }
- }
-
- return GDK_FILTER_CONTINUE;
-}
-
-static void
-gtk_tray_icon_send_manager_message (GtkTrayIcon *icon,
- long message,
- Window window,
- long data1,
- long data2,
- long data3)
-{
- GtkWidget *widget;
- XClientMessageEvent ev;
- Display *display;
-
- widget = GTK_WIDGET (icon);
-
- memset (&ev, 0, sizeof (ev));
- ev.type = ClientMessage;
- ev.window = window;
- ev.message_type = icon->priv->system_tray_opcode_atom;
- ev.format = 32;
- ev.data.l[0] = gdk_x11_get_server_time (gtk_widget_get_window (widget));
- ev.data.l[1] = message;
- ev.data.l[2] = data1;
- ev.data.l[3] = data2;
- ev.data.l[4] = data3;
-
- display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget));
-
- gdk_error_trap_push ();
- XSendEvent (display,
- icon->priv->manager_window, False, NoEventMask, (XEvent *)&ev);
- gdk_error_trap_pop_ignored ();
-}
-
-static void
-gtk_tray_icon_send_dock_request (GtkTrayIcon *icon)
-{
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: sending dock request to manager window %lx",
- icon, (gulong) icon->priv->manager_window));
-
- gtk_tray_icon_send_manager_message (icon,
- SYSTEM_TRAY_REQUEST_DOCK,
- icon->priv->manager_window,
- gtk_plug_get_id (GTK_PLUG (icon)),
- 0, 0);
-}
-
-static void
-gtk_tray_icon_update_manager_window (GtkTrayIcon *icon)
-{
- GtkWidget *widget = GTK_WIDGET (icon);
- GdkScreen *screen = gtk_widget_get_screen (widget);
- GdkDisplay *display = gdk_screen_get_display (screen);
- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: updating tray icon manager window, current manager window: %lx",
- icon, (gulong) icon->priv->manager_window));
-
- if (icon->priv->manager_window != None)
- return;
-
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: trying to find manager window", icon));
-
- XGrabServer (xdisplay);
-
- icon->priv->manager_window = XGetSelectionOwner (xdisplay,
- icon->priv->selection_atom);
-
- if (icon->priv->manager_window != None)
- XSelectInput (xdisplay,
- icon->priv->manager_window, StructureNotifyMask|PropertyChangeMask);
-
- XUngrabServer (xdisplay);
- XFlush (xdisplay);
-
- if (icon->priv->manager_window != None)
- {
- GdkWindow *gdkwin;
-
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: is being managed by window %lx",
- icon, (gulong) icon->priv->manager_window));
-
- gdkwin = gdk_x11_window_lookup_for_display (display,
- icon->priv->manager_window);
-
- gdk_window_add_filter (gdkwin, gtk_tray_icon_manager_filter, icon);
-
- gtk_tray_icon_get_orientation_property (icon);
- gtk_tray_icon_get_visual_property (icon);
- gtk_tray_icon_get_colors_property (icon);
- gtk_tray_icon_get_padding_property (icon);
- gtk_tray_icon_get_icon_size_property (icon);
-
- if (gtk_widget_get_realized (GTK_WIDGET (icon)))
- {
- if ((icon->priv->manager_visual == NULL &&
- gtk_widget_get_visual (widget) == gdk_screen_get_system_visual (screen)) ||
- (icon->priv->manager_visual == gtk_widget_get_visual (widget)))
- {
- /* Already have the right visual, can just dock
- */
- gtk_tray_icon_send_dock_request (icon);
- }
- else
- {
- /* Need to re-realize the widget to get the right visual
- */
- gtk_widget_hide (widget);
- gtk_widget_unrealize (widget);
- gtk_widget_show (widget);
- }
- }
- }
- else
- {
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: no tray manager found", icon));
- }
-}
-
-static void
-gtk_tray_icon_manager_window_destroyed (GtkTrayIcon *icon)
-{
- g_return_if_fail (icon->priv->manager_window != None);
-
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: tray manager window destroyed", icon));
-
- gtk_tray_icon_clear_manager_window (icon);
-}
-
-static gboolean
-gtk_tray_icon_delete (GtkWidget *widget,
- GdkEventAny *event)
-{
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: delete notify, tray manager window %lx",
- widget, (gulong) GTK_TRAY_ICON (widget)->priv->manager_window));
-
- /* A bug in X server versions up to x.org 1.5.0 means that:
- * XFixesChangeSaveSet(...., SaveSetRoot, SaveSetUnmap) doesn't work properly
- * and we'll left mapped in a separate toplevel window if the tray is destroyed.
- * For simplicity just get rid of our X window and start over.
- */
- gtk_widget_hide (widget);
- gtk_widget_unrealize (widget);
- gtk_widget_show (widget);
-
- /* Handled it, don't destroy the tray icon */
- return TRUE;
-}
-
-static void
-gtk_tray_icon_set_visual (GtkTrayIcon *icon)
-{
- GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
- GdkVisual *visual = icon->priv->manager_visual;
-
- /* To avoid uncertainty about colormaps, _NET_SYSTEM_TRAY_VISUAL is supposed
- * to be either the screen default visual or a TrueColor visual; ignore it
- * if it is something else
- */
- if (visual && gdk_visual_get_visual_type (visual) != GDK_VISUAL_TRUE_COLOR)
- visual = NULL;
-
- if (visual == NULL)
- visual = gdk_screen_get_system_visual (screen);
-
- gtk_widget_set_visual (GTK_WIDGET (icon), visual);
-}
-
-static void
-gtk_tray_icon_realize (GtkWidget *widget)
-{
- GtkTrayIcon *icon = GTK_TRAY_ICON (widget);
- GdkWindow *window;
-
- /* Set our visual before realizing */
- gtk_tray_icon_set_visual (icon);
-
- GTK_WIDGET_CLASS (gtk_tray_icon_parent_class)->realize (widget);
- window = gtk_widget_get_window (widget);
- if (icon->priv->manager_visual_rgba)
- {
- /* Set a transparent background */
- GdkRGBA transparent = { 0.0, 0.0, 0.0, 0.0 };
- gdk_window_set_background_rgba (window, &transparent);
- }
- else
- {
- /* Set a parent-relative background pixmap */
- gdk_window_set_background_pattern (window, NULL);
- }
-
- GTK_NOTE (PLUGSOCKET,
- g_message ("GtkStatusIcon %p: realized, window: %lx, socket window: %lx",
- widget,
- (gulong) GDK_WINDOW_XID (window),
- gtk_plug_get_socket_window (GTK_PLUG (icon))
- ? (gulong) GDK_WINDOW_XID (gtk_plug_get_socket_window (GTK_PLUG (icon)))
- : 0UL));
-
- if (icon->priv->manager_window != None)
- gtk_tray_icon_send_dock_request (icon);
-}
-
-static void
-gtk_tray_icon_style_updated (GtkWidget *widget)
-{
- /* The default handler resets the background according to the style. We either
- * use a transparent background or a parent-relative background and ignore the
- * style background. So, just don't chain up.
- */
-}
-
-guint
-_gtk_tray_icon_send_message (GtkTrayIcon *icon,
- gint timeout,
- const gchar *message,
- gint len)
-{
- guint stamp;
- Display *xdisplay;
-
- g_return_val_if_fail (GTK_IS_TRAY_ICON (icon), 0);
- g_return_val_if_fail (timeout >= 0, 0);
- g_return_val_if_fail (message != NULL, 0);
-
- if (icon->priv->manager_window == None)
- return 0;
-
- if (len < 0)
- len = strlen (message);
-
- stamp = icon->priv->stamp++;
-
- /* Get ready to send the message */
- gtk_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
- (Window)gtk_plug_get_id (GTK_PLUG (icon)),
- timeout, len, stamp);
-
- /* Now to send the actual message */
- xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
- gdk_error_trap_push ();
- while (len > 0)
- {
- XClientMessageEvent ev;
-
- memset (&ev, 0, sizeof (ev));
- ev.type = ClientMessage;
- ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
- ev.format = 8;
- ev.message_type = XInternAtom (xdisplay,
- "_NET_SYSTEM_TRAY_MESSAGE_DATA", False);
- if (len > 20)
- {
- memcpy (&ev.data, message, 20);
- len -= 20;
- message += 20;
- }
- else
- {
- memcpy (&ev.data, message, len);
- len = 0;
- }
-
- XSendEvent (xdisplay,
- icon->priv->manager_window, False,
- StructureNotifyMask, (XEvent *)&ev);
- }
- gdk_error_trap_pop_ignored ();
-
- return stamp;
-}
-
-void
-_gtk_tray_icon_cancel_message (GtkTrayIcon *icon,
- guint id)
-{
- g_return_if_fail (GTK_IS_TRAY_ICON (icon));
- g_return_if_fail (id > 0);
-
- gtk_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
- (Window)gtk_plug_get_id (GTK_PLUG (icon)),
- id, 0, 0);
-}
-
-GtkTrayIcon *
-_gtk_tray_icon_new_for_screen (GdkScreen *screen,
- const gchar *name)
-{
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- return g_object_new (GTK_TYPE_TRAY_ICON,
- "screen", screen,
- "title", name,
- NULL);
-}
-
-GtkTrayIcon*
-_gtk_tray_icon_new (const gchar *name)
-{
- return g_object_new (GTK_TYPE_TRAY_ICON,
- "title", name,
- NULL);
-}
-
-GtkOrientation
-_gtk_tray_icon_get_orientation (GtkTrayIcon *icon)
-{
- g_return_val_if_fail (GTK_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
-
- return icon->priv->orientation;
-}
-
-gint
-_gtk_tray_icon_get_padding (GtkTrayIcon *icon)
-{
- g_return_val_if_fail (GTK_IS_TRAY_ICON (icon), 0);
-
- return icon->priv->padding;
-}
-
-gint
-_gtk_tray_icon_get_icon_size (GtkTrayIcon *icon)
-{
- g_return_val_if_fail (GTK_IS_TRAY_ICON (icon), 0);
-
- return icon->priv->icon_size;
-}
diff --git a/gtk/deprecated/gtktrayicon.h b/gtk/deprecated/gtktrayicon.h
deleted file mode 100644
index 4be745e341..0000000000
--- a/gtk/deprecated/gtktrayicon.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* gtktrayicon.h
- * Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __GTK_TRAY_ICON_H__
-#define __GTK_TRAY_ICON_H__
-
-#include "gtkplug.h"
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_TRAY_ICON (gtk_tray_icon_get_type ())
-#define GTK_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TRAY_ICON, GtkTrayIcon))
-#define GTK_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TRAY_ICON, GtkTrayIconClass))
-#define GTK_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TRAY_ICON))
-#define GTK_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TRAY_ICON))
-#define GTK_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TRAY_ICON, GtkTrayIconClass))
-
-typedef struct _GtkTrayIcon GtkTrayIcon;
-typedef struct _GtkTrayIconPrivate GtkTrayIconPrivate;
-typedef struct _GtkTrayIconClass GtkTrayIconClass;
-
-struct _GtkTrayIcon
-{
- GtkPlug parent_instance;
-
- GtkTrayIconPrivate *priv;
-};
-
-struct _GtkTrayIconClass
-{
- GtkPlugClass parent_class;
-
- /* Padding for future expansion */
- void (*_gtk_reserved1);
- void (*_gtk_reserved2);
- void (*_gtk_reserved3);
- void (*_gtk_reserved4);
-};
-
-GDK_AVAILABLE_IN_ALL
-GType gtk_tray_icon_get_type (void) G_GNUC_CONST;
-
-GtkTrayIcon *_gtk_tray_icon_new_for_screen (GdkScreen *screen,
- const gchar *name);
-
-GtkTrayIcon *_gtk_tray_icon_new (const gchar *name);
-
-guint _gtk_tray_icon_send_message (GtkTrayIcon *icon,
- gint timeout,
- const gchar *message,
- gint len);
-void _gtk_tray_icon_cancel_message (GtkTrayIcon *icon,
- guint id);
-
-GtkOrientation _gtk_tray_icon_get_orientation (GtkTrayIcon *icon);
-gint _gtk_tray_icon_get_padding (GtkTrayIcon *icon);
-gint _gtk_tray_icon_get_icon_size (GtkTrayIcon *icon);
-
-G_END_DECLS
-
-#endif /* __GTK_TRAY_ICON_H__ */