Beispiel #1
0
void tray_init(GtkWidget* container)
{
    _icons = g_hash_table_new(g_direct_hash, g_direct_equal);
    GdkScreen* screen = gdk_screen_get_default();
    NaTrayManager* tray_manager = NULL;
    tray_manager = na_tray_manager_new();
    //TODO: update _na_base_y
    na_tray_manager_manage_screen(tray_manager, screen);

    g_signal_connect(tray_manager, "tray_icon_added", G_CALLBACK(tray_icon_added), container);
    g_signal_connect_after(container, "draw", G_CALLBACK(draw_tray_icons), NULL);
    _TRY_ICON_INIT = TRUE;
}
void
shell_tray_manager_manage_screen (ShellTrayManager *manager,
                                  MetaScreen       *screen,
                                  StWidget         *theme_widget)
{
  GdkDisplay *display;
  GdkScreen *gdk_screen;
  int screen_number;

  display = gdk_display_get_default ();
  screen_number = meta_screen_get_screen_number (screen);
  gdk_screen = gdk_display_get_screen (display, screen_number);

  na_tray_manager_manage_screen (manager->priv->na_manager, gdk_screen);

  g_signal_connect (theme_widget, "style-changed",
                    G_CALLBACK (shell_tray_manager_style_changed), manager);
  shell_tray_manager_style_changed (theme_widget, manager);
}
Beispiel #3
0
void
cinnamon_tray_manager_manage_stage (CinnamonTrayManager *manager,
                                 ClutterStage     *stage,
                                 StWidget         *theme_widget)
{
  Window stage_xwindow;
  GdkWindow *stage_window;
  GdkDisplay *display;
  GdkScreen *screen;

  g_return_if_fail (manager->priv->stage == NULL);

  manager->priv->stage = g_object_ref (stage);

  stage_xwindow = clutter_x11_get_stage_window (stage);

  /* This is a pretty ugly way to get the GdkScreen for the stage; it
   *  will normally go through the foreign_new() case with a
   *  round-trip to the X server, it might be nicer to pass the screen
   *  in in some way. (The Clutter/Muffin combo is currently incapable
   *  of multi-screen operation, so alternatively we could just assume
   *  that clutter_x11_get_default_screen() gives us the right
   *  screen.) We assume, in any case, that we are using the default
   *  GDK display.
   */
  display = gdk_display_get_default();
  stage_window = gdk_x11_window_lookup_for_display (display, stage_xwindow);
  if (stage_window)
    g_object_ref (stage_window);
  else
    stage_window = gdk_x11_window_foreign_new_for_display (display, stage_xwindow);

  screen = gdk_window_get_screen (stage_window);

  g_object_unref (stage_window);

  na_tray_manager_manage_screen (manager->priv->na_manager, screen);

  g_signal_connect (theme_widget, "style-changed",
                    G_CALLBACK (cinnamon_tray_manager_style_changed), manager);
  cinnamon_tray_manager_style_changed (theme_widget, manager);
}
static GObject *
na_tray_constructor (GType type,
                     guint n_construct_properties,
                     GObjectConstructParam *construct_params)
{
  GObject *object;
  NaTray *tray;
  NaTrayPrivate *priv;
  int screen_number;

  object = G_OBJECT_CLASS (na_tray_parent_class)->constructor (type,
                                                               n_construct_properties,
                                                               construct_params);
  tray = NA_TRAY (object);
  priv = tray->priv;

  g_assert (priv->screen != NULL);

  if (!initialized)
    {
      GdkDisplay *display;
      int n_screens;

      display = gdk_display_get_default ();
      n_screens = gdk_display_get_n_screens (display);
      trays_screens = g_new0 (TraysScreen, n_screens);
      initialized = TRUE;
    }

  screen_number = gdk_screen_get_number (priv->screen);

  if (trays_screens [screen_number].tray_manager == NULL)
    {
      NaTrayManager *tray_manager;

      tray_manager = na_tray_manager_new ();

      if (na_tray_manager_manage_screen (tray_manager, priv->screen))
        {
          trays_screens [screen_number].tray_manager = tray_manager;

          g_signal_connect (tray_manager, "tray_icon_added",
                            G_CALLBACK (tray_added),
                            &trays_screens [screen_number]);
          g_signal_connect (tray_manager, "tray_icon_removed",
                            G_CALLBACK (tray_removed),
                            &trays_screens [screen_number]);
          g_signal_connect (tray_manager, "message_sent",
                            G_CALLBACK (message_sent),
                            &trays_screens [screen_number]);
          g_signal_connect (tray_manager, "message_cancelled",
                            G_CALLBACK (message_cancelled),
                            &trays_screens [screen_number]);

          trays_screens [screen_number].icon_table = g_hash_table_new (NULL,
                                                                       NULL);
          trays_screens [screen_number].tip_table = g_hash_table_new_full (
                                                                NULL,
                                                                NULL,
                                                                NULL,
                                                                icon_tip_free);
        }
      else
        {
          g_printerr ("System tray didn't get the system tray manager selection for screen %d\n",
		      screen_number);
          g_object_unref (tray_manager);
        }
    }
      
  priv->trays_screen = &trays_screens [screen_number];
  trays_screens [screen_number].all_trays = g_slist_append (trays_screens [screen_number].all_trays,
                                                            tray);

  update_size_and_orientation (tray);

  return object;
}