]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkstatusicon.c
a11y: Redo ref_accessible_at_point()
[~andy/gtk] / gtk / gtkstatusicon.c
index f12a20ae902e220186329cc826098c3af56b24fd..6f7bf89824a7b48ab73f89ab1891ca91f0aee80c 100644 (file)
@@ -132,10 +132,11 @@ struct _GtkStatusIconPrivate
 #ifdef GDK_WINDOWING_X11
   GtkWidget    *tray_icon;
   GtkWidget    *image;
+#else
+  GtkWidget    *dummy_widget;
 #endif
 
 #ifdef GDK_WINDOWING_WIN32
-  GtkWidget     *dummy_widget;
   NOTIFYICONDATAW nid;
   gint          taskbar_top;
   gint         last_click_x, last_click_y;
@@ -145,7 +146,6 @@ struct _GtkStatusIconPrivate
 #endif
        
 #ifdef GDK_WINDOWING_QUARTZ
-  GtkWidget     *dummy_widget;
   GtkQuartzStatusIcon *status_item;
   gchar         *tooltip_text;
   gchar         *title;
@@ -682,7 +682,7 @@ button_callback (gpointer data)
   gdk_event_free ((GdkEvent *) bc->event);
   g_free (data);
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
 
 static UINT taskbar_created_msg = 0;
@@ -891,6 +891,8 @@ gtk_status_icon_init (GtkStatusIcon *status_icon)
   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
@@ -913,7 +915,6 @@ gtk_status_icon_init (GtkStatusIcon *status_icon)
 
   /* Are the system tray icons always 16 pixels square? */
   priv->size         = 16;
-  priv->dummy_widget = gtk_label_new ("");
 
   memset (&priv->nid, 0, sizeof (priv->nid));
 
@@ -944,8 +945,6 @@ gtk_status_icon_init (GtkStatusIcon *status_icon)
 #endif
        
 #ifdef GDK_WINDOWING_QUARTZ
-  priv->dummy_widget = gtk_label_new ("");
-
   QUARTZ_POOL_ALLOC;
 
   priv->status_item = [[GtkQuartzStatusIcon alloc] initWithStatusIcon:status_icon];
@@ -1020,6 +1019,8 @@ gtk_status_icon_finalize (GObject *object)
                                        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
@@ -1029,8 +1030,6 @@ gtk_status_icon_finalize (GObject *object)
     DestroyIcon (priv->nid.hIcon);
   g_free (priv->tooltip_text);
 
-  gtk_widget_destroy (priv->dummy_widget);
-
   status_icons = g_slist_remove (status_icons, status_icon);
 #endif
        
@@ -1309,8 +1308,6 @@ emit_size_changed_signal (GtkStatusIcon *status_icon,
 
 #endif
 
-#ifdef GDK_WINDOWING_X11
-
 /* rounds the pixel size to the nearest size avaiable in the theme */
 static gint
 round_pixel_size (GtkWidget *widget, 
@@ -1348,8 +1345,6 @@ round_pixel_size (GtkWidget *widget,
   return size;
 }
 
-#endif
-
 static void
 gtk_status_icon_update_image (GtkStatusIcon *status_icon)
 {
@@ -1358,17 +1353,19 @@ gtk_status_icon_update_image (GtkStatusIcon *status_icon)
   HICON prev_hicon;
 #endif
   GtkStyleContext *context;
+  GtkWidget *widget;
   GtkImageType storage_type = _gtk_icon_helper_get_storage_type (priv->icon_helper);
   GdkPixbuf *pixbuf;
   gint round_size;
 
 #ifdef GDK_WINDOWING_X11
-  context = gtk_widget_get_style_context (priv->image);
+  widget = priv->image;
 #else
-  context = gtk_widget_get_style_context (priv->dummy_widget);
+  widget = priv->dummy_widget;
 #endif
 
-  round_size = round_pixel_size (priv->image, priv->size);
+  context = gtk_widget_get_style_context (widget);
+  round_size = round_pixel_size (widget, priv->size);
 
   if (storage_type == GTK_IMAGE_PIXBUF)
     {
@@ -1628,7 +1625,7 @@ gtk_status_icon_button_press (GtkStatusIcon  *status_icon,
       emit_popup_menu_signal (status_icon, event->button, event->time);
       return TRUE;
     }
-  else if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+  else if (event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
     {
       emit_activate_signal (status_icon);
       return TRUE;
@@ -2221,12 +2218,12 @@ gtk_status_icon_position_menu (GtkMenu  *menu,
     monitor_num = 0;
   gtk_menu_set_monitor (menu, monitor_num);
 
-  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
 
   gdk_window_get_origin (window, x, y);
 
-  gtk_widget_get_preferred_size (GTK_WIDGET (menu),
-                                 &menu_req, NULL);
+  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)