X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7669dce5d2eaf1a5d9719dbf2d25b6735ae84d65..0d1903dbda864780eec30efdc4e91776bdbfd21b:/src/gtk/taskbar.cpp diff --git a/src/gtk/taskbar.cpp b/src/gtk/taskbar.cpp index 8a25c000fd..599ef25377 100644 --- a/src/gtk/taskbar.cpp +++ b/src/gtk/taskbar.cpp @@ -4,7 +4,6 @@ // Author: Vaclav Slavik // Modified by: Paul Cornett // Created: 2004/05/29 -// RCS-ID: $Id$ // Copyright: (c) Vaclav Slavik, 2004 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////// @@ -22,8 +21,13 @@ #include "wx/icon.h" #endif -#include "eggtrayicon.h" #include +#ifdef GDK_WINDOWING_X11 + #include +#endif +#ifndef __WXGTK3__ + #include "eggtrayicon.h" +#endif #if !GTK_CHECK_VERSION(2,10,0) typedef struct _GtkStatusIcon GtkStatusIcon; @@ -41,20 +45,23 @@ public: wxTaskBarIcon* m_taskBarIcon; // used when GTK+ >= 2.10 GtkStatusIcon* m_statusIcon; - // used when GTK+ < 2.10 - GtkWidget* m_eggTrayIcon; // for PopupMenu wxWindow* m_win; - // for tooltip when GTK+ < 2.10 - GtkTooltips* m_tooltips; wxBitmap m_bitmap; wxString m_tipText; +#ifndef __WXGTK3__ + // used when GTK+ < 2.10 + GtkWidget* m_eggTrayIcon; + // for tooltip when GTK+ < 2.10 + GtkTooltips* m_tooltips; // width and height of available space, only used when GTK+ < 2.10 int m_size; +#endif }; //----------------------------------------------------------------------------- extern "C" { +#ifndef __WXGTK3__ static void icon_size_allocate(GtkWidget*, GtkAllocation* alloc, wxTaskBarIcon::Private* priv) { @@ -69,6 +76,7 @@ icon_destroy(GtkWidget*, wxTaskBarIcon::Private* priv) priv->m_eggTrayIcon = NULL; priv->SetIcon(); } +#endif static void icon_activate(void*, wxTaskBarIcon* taskBarIcon) @@ -91,6 +99,7 @@ icon_popup_menu(GtkWidget*, wxTaskBarIcon* taskBarIcon) return true; } +#ifndef __WXGTK3__ static gboolean icon_button_press_event(GtkWidget*, GdkEventButton* event, wxTaskBarIcon* taskBarIcon) { @@ -103,6 +112,7 @@ icon_button_press_event(GtkWidget*, GdkEventButton* event, wxTaskBarIcon* taskBa } return false; } +#endif #if GTK_CHECK_VERSION(2,10,0) static void @@ -116,6 +126,7 @@ status_icon_popup_menu(GtkStatusIcon*, guint, guint, wxTaskBarIcon* taskBarIcon) bool wxTaskBarIconBase::IsAvailable() { +#ifdef GDK_WINDOWING_X11 char name[32]; g_snprintf(name, sizeof(name), "_NET_SYSTEM_TRAY_S%d", gdk_x11_get_default_screen()); @@ -124,6 +135,9 @@ bool wxTaskBarIconBase::IsAvailable() Window manager = XGetSelectionOwner(gdk_x11_get_default_xdisplay(), atom); return manager != None; +#else + return true; +#endif } //----------------------------------------------------------------------------- @@ -131,37 +145,43 @@ wxTaskBarIcon::Private::Private(wxTaskBarIcon* taskBarIcon) { m_taskBarIcon = taskBarIcon; m_statusIcon = NULL; - m_eggTrayIcon = NULL; m_win = NULL; +#ifndef __WXGTK3__ + m_eggTrayIcon = NULL; m_tooltips = NULL; m_size = 0; +#endif } wxTaskBarIcon::Private::~Private() { if (m_statusIcon) g_object_unref(m_statusIcon); +#ifndef __WXGTK3__ else if (m_eggTrayIcon) { g_signal_handlers_disconnect_by_func(m_eggTrayIcon, (void*)icon_destroy, this); gtk_widget_destroy(m_eggTrayIcon); } +#endif if (m_win) { m_win->PopEventHandler(); m_win->Destroy(); } +#ifndef __WXGTK3__ if (m_tooltips) { gtk_object_destroy(GTK_OBJECT(m_tooltips)); g_object_unref(m_tooltips); } +#endif } void wxTaskBarIcon::Private::SetIcon() { #if GTK_CHECK_VERSION(2,10,0) - if (gtk_check_version(2,10,0) == NULL) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,10,0) == NULL) { if (m_statusIcon) gtk_status_icon_set_from_pixbuf(m_statusIcon, m_bitmap.GetPixbuf()); @@ -177,10 +197,11 @@ void wxTaskBarIcon::Private::SetIcon() else #endif { +#ifndef __WXGTK3__ m_size = 0; if (m_eggTrayIcon) { - GtkWidget* image = GTK_BIN(m_eggTrayIcon)->child; + GtkWidget* image = gtk_bin_get_child(GTK_BIN(m_eggTrayIcon)); gtk_image_set_from_pixbuf(GTK_IMAGE(image), m_bitmap.GetPixbuf()); } else @@ -199,18 +220,31 @@ void wxTaskBarIcon::Private::SetIcon() gtk_container_add(GTK_CONTAINER(m_eggTrayIcon), image); gtk_widget_show_all(m_eggTrayIcon); } +#endif } #if wxUSE_TOOLTIPS const char *tip_text = NULL; if (!m_tipText.empty()) - tip_text = m_tipText.c_str(); + tip_text = m_tipText.utf8_str(); #if GTK_CHECK_VERSION(2,10,0) if (m_statusIcon) - gtk_status_icon_set_tooltip(m_statusIcon, tip_text); - else + { +#if GTK_CHECK_VERSION(2,16,0) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,16,0) == NULL) + gtk_status_icon_set_tooltip_text(m_statusIcon, tip_text); + else #endif + { +#ifndef __WXGTK3__ + gtk_status_icon_set_tooltip(m_statusIcon, tip_text); +#endif + } + } + else +#endif // GTK_CHECK_VERSION(2,10,0) { +#ifndef __WXGTK3__ if (tip_text && m_tooltips == NULL) { m_tooltips = gtk_tooltips_new(); @@ -219,10 +253,12 @@ void wxTaskBarIcon::Private::SetIcon() } if (m_tooltips) gtk_tooltips_set_tip(m_tooltips, m_eggTrayIcon, tip_text, ""); +#endif } #endif // wxUSE_TOOLTIPS } +#ifndef __WXGTK3__ void wxTaskBarIcon::Private::size_allocate(int width, int height) { int size = height; @@ -240,16 +276,17 @@ void wxTaskBarIcon::Private::size_allocate(int width, int height) if (h > size) h = size; GdkPixbuf* pixbuf = gdk_pixbuf_scale_simple(m_bitmap.GetPixbuf(), w, h, GDK_INTERP_BILINEAR); - GtkImage* image = GTK_IMAGE(GTK_BIN(m_eggTrayIcon)->child); + GtkImage* image = GTK_IMAGE(gtk_bin_get_child(GTK_BIN(m_eggTrayIcon))); gtk_image_set_from_pixbuf(image, pixbuf); g_object_unref(pixbuf); } } +#endif //----------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxTaskBarIcon, wxEvtHandler) -wxTaskBarIcon::wxTaskBarIcon() +wxTaskBarIcon::wxTaskBarIcon(wxTaskBarIconType WXUNUSED(iconType)) { m_priv = new Private(this); } @@ -276,7 +313,11 @@ bool wxTaskBarIcon::RemoveIcon() bool wxTaskBarIcon::IsIconInstalled() const { +#ifdef __WXGTK3__ + return m_priv->m_statusIcon != NULL; +#else return m_priv->m_statusIcon || m_priv->m_eggTrayIcon; +#endif } bool wxTaskBarIcon::PopupMenu(wxMenu* menu)