static void egg_tray_icon_update_manager_window (EggTrayIcon *icon)
{
  Display *xdisplay;

  xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
  
  if (icon->manager_window != None)
    {
      GdkWindow *gdkwin;

      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
					      icon->manager_window);
      
      gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
    }
  
  XGrabServer (xdisplay);
  
  icon->manager_window = XGetSelectionOwner (xdisplay,
					     icon->selection_atom);

  if (icon->manager_window != None)
    XSelectInput (xdisplay,
		  icon->manager_window, StructureNotifyMask|PropertyChangeMask);

  XUngrabServer (xdisplay);
  XFlush (xdisplay);
  
  if (icon->manager_window != None)
    {
      GdkWindow *gdkwin;

      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
					      icon->manager_window);
      
      gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);

      /* Send a request that we'd like to dock */
      egg_tray_icon_send_dock_request (icon);

      egg_tray_icon_get_orientation_property (icon);
    }
}
Exemple #2
0
static void
egg_tray_icon_update_manager_window (EggTrayIcon *icon,
				     gboolean     dock_if_realized)
{
  Display *xdisplay;
  
  if (icon->manager_window != None)
    return;

  xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
  
  XGrabServer (xdisplay);
  
  icon->manager_window = XGetSelectionOwner (xdisplay,
					     icon->selection_atom);

  if (icon->manager_window != None)
    XSelectInput (xdisplay,
		  icon->manager_window, StructureNotifyMask|PropertyChangeMask);

  XUngrabServer (xdisplay);
  XFlush (xdisplay);
  
  if (icon->manager_window != None)
    {
      GdkWindow *gdkwin;

      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
					      icon->manager_window);
      
      gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);

      if (dock_if_realized && GTK_WIDGET_REALIZED (icon))
	egg_tray_icon_send_dock_request (icon);

      egg_tray_icon_get_orientation_property (icon);
    }
}
Exemple #3
0
static void egg_tray_icon_update_manager_window (EggTrayIcon *icon) {

	static GdkPixbuf *background_pixbuf;
	const gchar *window_manager=NULL;

	if (icon->manager_window != None) {
		GdkWindow *gdkwin;
		gdkwin = gdk_window_lookup (icon->manager_window);
		gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
	}

	XGrabServer (GDK_DISPLAY());

	icon->manager_window = XGetSelectionOwner (GDK_DISPLAY(),
			icon->selection_atom);

	if (icon->manager_window != None)
		XSelectInput (GDK_DISPLAY(), icon->manager_window, StructureNotifyMask);

	XUngrabServer (GDK_DISPLAY());
	XFlush (GDK_DISPLAY());

	if (icon->manager_window == None)
		return;

	window_manager=gdk_x11_screen_get_window_manager_name (gdk_screen_get_default());

	if ( !g_ascii_strcasecmp(window_manager, kde_window_manger) && kde_dock (icon)) {

		if ((background_pixbuf=kde_dock_background(icon)) !=NULL) {

			icon->box= gtk_fixed_new ();
			gtk_fixed_set_has_window(GTK_FIXED (icon->box),TRUE);
			gtk_container_add(GTK_CONTAINER(icon), icon->box);

			icon->image=gtk_image_new ();
			gtk_image_set_from_pixbuf(GTK_IMAGE(icon->image), icon->default_pix);

			icon->background =gtk_image_new ();
			gtk_image_set_from_pixbuf(GTK_IMAGE(icon->background), background_pixbuf);

			gtk_fixed_put (GTK_FIXED (icon->box), GTK_WIDGET(icon->background), 0, 0);
			gtk_fixed_put (GTK_FIXED (icon->box), GTK_WIDGET(icon->image), 0, 0);

			gtk_widget_show (icon->background);
			gtk_widget_show (icon->image);
			gtk_widget_show(icon->box);

			icon->ready=TRUE;
		}
	} else {

		icon->box=gtk_event_box_new ();
		gtk_container_add(GTK_CONTAINER(icon), icon->box);

		icon->image=gtk_image_new ();
		gtk_image_set_from_pixbuf(GTK_IMAGE(icon->image),icon->default_pix);
		gtk_container_add(GTK_CONTAINER(icon->box), icon->image);

		gtk_widget_show (icon->image);
		gtk_widget_show(icon->box);

		GdkWindow *gdkwin;

		gdkwin = gdk_window_lookup (icon->manager_window);
		gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);

		/* Send a request that we'd like to dock */
		egg_tray_icon_send_dock_request (icon);
	}
}