static void
cairo_main_icon_constructed (GObject *object)
{
  CairoMainIconPrivate * priv = GET_PRIVATE (object);
  GdkPixbuf * pbuf;
  gint size = awn_applet_get_size (priv->applet);
  G_OBJECT_CLASS (cairo_main_icon_parent_class)->constructed (object);

  awn_themed_icon_set_info_simple (AWN_THEMED_ICON(object),"cairo-menu",awn_applet_get_uid (priv->applet),"gnome-main-menu");
  awn_themed_icon_set_size (AWN_THEMED_ICON (object),size);

  gtk_drag_dest_set (GTK_WIDGET (object),
                       GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
                       drop_types, n_drop_types,
                       GDK_ACTION_COPY | GDK_ACTION_ASK);
  /* call our function in the module */

  priv->menu_instance = get_menu_instance (priv->applet,
                                          (GetRunCmdFunc)cairo_menu_applet_get_run_cmd,
                                          (GetSearchCmdFunc)cairo_menu_applet_get_search_cmd,
                                          (AddIconFunc) cairo_menu_applet_add_icon,
                                          (CheckMenuHiddenFunc) cairo_menu_applet_check_hidden_menu,
                                          NULL,
                                          0);

  g_idle_add ( (GSourceFunc)queue_menu_build, object);
  awn_icon_set_tooltip_text (AWN_ICON (object), _("Main Menu"));
}
static GtkWidget *
pixbuf_icon (GtkWidget *parent)
{
  GdkPixbuf *pixbuf;
  GtkWidget *icon;

  pixbuf = gdk_pixbuf_new_from_file_at_size (PICTURE_FILE, 50, 50, NULL);

  icon = awn_icon_new ();
  awn_icon_set_from_pixbuf (AWN_ICON (icon), pixbuf);
  awn_icon_set_tooltip_text (AWN_ICON (icon), "Pixbuf Icon");

  /* test the signals */
  AwnEffects *fx = awn_overlayable_get_effects (AWN_OVERLAYABLE (icon));
  g_signal_connect(fx, "animation-start", (GCallback)anim_started, NULL);
  g_signal_connect(fx, "animation-end", (GCallback)anim_ended, NULL);

  gtk_container_add (GTK_CONTAINER (parent), icon);
  gtk_widget_show (icon);

  g_signal_connect (icon, "button-release-event", 
                    G_CALLBACK (on_click), parent); 
  g_object_unref (pixbuf);
  return icon;
}
/*
 * GtkSocket callbacks
 */
static gboolean
on_plug_removed (AwnAppletProxy *proxy, gpointer user_data)
{
  AwnAppletProxyPrivate *priv;

  g_return_val_if_fail (AWN_IS_APPLET_PROXY (proxy), FALSE);
  priv = proxy->priv;

  /* reset our old position */
  priv->old_x = 0;
  priv->old_y = 0;
  priv->old_w = 0;
  priv->old_h = 0;

  /* indicate that the applet crashed and allow restart */
  priv->running = FALSE;
  priv->crashed = TRUE;
  awn_icon_set_tooltip_text (AWN_ICON (priv->throbber),
    _("Whoops! The applet crashed. Click to restart it."));
  awn_throbber_set_type (AWN_THROBBER (priv->throbber),
                         AWN_THROBBER_TYPE_SAD_FACE);
  awn_icon_set_hover_effects (AWN_ICON (priv->throbber), TRUE);

  g_signal_emit (proxy, _proxy_signals[APPLET_CRASHED], 0);

  return TRUE;
}
void 
awn_applet_simple_set_tooltip_text (AwnAppletSimple  *applet,
                                    const gchar      *title)
{
  g_return_if_fail (AWN_IS_APPLET_SIMPLE (applet));
  
  awn_icon_set_tooltip_text (AWN_ICON (applet->priv->icon), title);
}
static gboolean
throbber_click (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
  AwnAppletProxyPrivate *priv = AWN_APPLET_PROXY_GET_PRIVATE(user_data);

  if (!priv->running)
  {
    priv->crashed = FALSE;
    awn_icon_set_tooltip_text (AWN_ICON (priv->throbber),
                               _("Loading applet..."));
    awn_throbber_set_type (AWN_THROBBER (priv->throbber),
                           AWN_THROBBER_TYPE_NORMAL);
    awn_icon_set_hover_effects (AWN_ICON (priv->throbber), FALSE);

    awn_applet_proxy_execute (AWN_APPLET_PROXY (user_data));
  }
  return FALSE;
}
static GtkWidget *
pixbuf_icon (GtkWidget *parent)
{
    GdkPixbuf *pixbuf;
    GtkWidget *icon;

    pixbuf = gdk_pixbuf_new_from_file_at_size (PICTURE_FILE, 50, 50, NULL);

    icon = awn_icon_new ();
    awn_icon_set_from_pixbuf (AWN_ICON (icon), pixbuf);
    awn_icon_set_pos_type (AWN_ICON (icon), GTK_POS_BOTTOM);
    awn_icon_set_tooltip_text (AWN_ICON (icon), "Pixbuf Icon");
    gtk_container_add (GTK_CONTAINER (parent), icon);
    gtk_widget_show (icon);

    g_signal_connect (icon, "button-release-event",
                      G_CALLBACK (on_click), parent);
    g_object_unref (pixbuf);
    return icon;
}
static GtkWidget *
thin_surface_icon (GtkWidget *parent)
{
  GtkWidget *icon;
  cairo_surface_t *surface;
  cairo_t *cr;

  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 25, 75);

  cr = cairo_create (surface);
  
  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
  cairo_paint (cr);

  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);

  cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, 0.8);
  cairo_rectangle (cr, 0, 0, 25, 75);
  cairo_fill_preserve (cr);
  cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8);
  cairo_stroke (cr);

  cairo_destroy (cr);

  icon = awn_icon_new ();
  awn_icon_set_from_surface (AWN_ICON (icon), surface);
  awn_icon_set_tooltip_text (AWN_ICON (icon), "Thin Surface Icon");
  
  gtk_container_add (GTK_CONTAINER (parent), icon);
  gtk_widget_show (icon);

  g_signal_connect (icon, "button-release-event", 
                    G_CALLBACK (on_click), parent);

  cairo_surface_destroy (surface);

  return icon;
}
static void
on_child_exit (GPid pid, gint status, gpointer user_data)
{
  if (AWN_IS_APPLET_PROXY (user_data))
  {
    AwnAppletProxyPrivate *priv = AWN_APPLET_PROXY_GET_PRIVATE (user_data);

    /* FIXME: we could do something with the status var... nice error messages?! */
    /*
    switch (status)
    {
      case ???:
        awn_throbber_set_text (AWN_THROBBER (priv->throbber), _("..."));
        break;
      default:
        awn_throbber_set_text (AWN_THROBBER (priv->throbber), _("..."));
        break;
    }
    */

    priv->running = FALSE;
    priv->crashed = TRUE;

    awn_throbber_set_type (AWN_THROBBER (priv->throbber),
                           AWN_THROBBER_TYPE_SAD_FACE);
    awn_icon_set_tooltip_text (AWN_ICON (priv->throbber),
      _("Whoops! The applet crashed. Click to restart it."));
    awn_icon_set_hover_effects (AWN_ICON (priv->throbber), TRUE);

    g_signal_emit (user_data, _proxy_signals[APPLET_CRASHED], 0);
    /* we won't call gtk_widget_show - on_plug_removed does that
     * and if the plug wasn't even added, the throbber widget is still visible
     */
  }

  g_spawn_close_pid(pid); /* doesn't do anything on UNIX, but let's have it */
}
static void
awn_applet_proxy_init (AwnAppletProxy *proxy)
{
  AwnAppletProxyPrivate *priv;

  priv = proxy->priv = AWN_APPLET_PROXY_GET_PRIVATE (proxy);

  /* Connect to the socket signals */
  g_signal_connect (proxy, "plug-removed", G_CALLBACK (on_plug_removed), NULL);
  g_signal_connect (proxy, "size-allocate", G_CALLBACK (on_size_alloc), NULL);
  awn_utils_ensure_transparent_bg (GTK_WIDGET (proxy));
  /* Rest is for the crash notification window */
  priv->running = TRUE;
  priv->crashed = FALSE;

  priv->throbber = awn_throbber_new_with_config (
      awn_config_get_default (0, NULL));

  awn_icon_set_tooltip_text (AWN_ICON (priv->throbber),
                             _("Loading applet..."));

  g_signal_connect (priv->throbber, "button-release-event",
                    G_CALLBACK (throbber_click), proxy);
}
Beispiel #10
0
static gboolean 
_awn_CPUicon_update_icon(gpointer object)
{  

  AwnCPUiconPrivate * priv;  
  AwnSysmoniconPrivate * sysmonicon_priv=NULL;  
  AwnCPUicon * icon = object;
  AwnGraphSinglePoint *point;
  GList * list = NULL;
  gchar *text;
  priv = AWN_CPUICON_GET_PRIVATE (object);
  sysmonicon_priv = AWN_SYSMONICON_GET_PRIVATE (object);

  g_object_set (object,
                "invalidate",TRUE,
                NULL);
  
  /*FIXME change this to some type of graph_type thing */
  if ( (AWN_IS_AREAGRAPH(sysmonicon_priv->graph)) ||
        (AWN_IS_CIRCLEGRAPH(sysmonicon_priv->graph) ))
  {   
    point = g_new0 (AwnGraphSinglePoint,1);    
    *point = awn_CPUicon_get_load (object);
    /* Translators: %2.0lf is a number, %% is a percent sign, do not change them */
    text = g_strdup_printf (_("CPU: %2.0lf%%"),point->value);
//    awn_tooltip_set_text (AWN_TOOLTIP(sysmonicon_priv->tooltip),text);
    awn_icon_set_tooltip_text (AWN_ICON(object),text);    
    g_free (text);
    text = g_strdup_printf("%.0lf%%",point->value);  
    g_object_set (priv->text_overlay,
                  "text", text,
                 NULL);  
    g_free (text);
    
    list = g_list_prepend (list,point);
   
    awn_graph_add_data (sysmonicon_priv->graph,list);
    awn_sysmonicon_update_icon (AWN_SYSMONICON (icon));
    g_free (point);
    g_list_free (list);
  }
  else if ( AWN_IS_BARGRAPH(sysmonicon_priv->graph))
  {
    
#undef NOW
#undef LAST
#define LAST (priv->times[priv->now])
#define NOW (priv->times[priv->now ^ 1])
    
    AwnGraphSinglePoint avg_point = awn_CPUicon_get_load (object);      
    gint i;
    GList * iter;    
    glibtop_cpu cpu;
    glibtop_get_cpu(&cpu);
    
    for (i = 0; i < priv->num_cpus; i++)
    {
      gint64 total;
      gint64 total_used;
      gdouble percent_used;
      total = NOW[i][CPU_TOTAL] - LAST[i][CPU_TOTAL];
      total_used = NOW[i][CPU_USED] - LAST[i][CPU_USED];
      percent_used = total_used / (gdouble) total * 100.0;
      point = g_new0 (AwnGraphSinglePoint,1);      
      point->value = percent_used;
      list = g_list_prepend (list,point); 
    }
    text = g_strdup_printf (_("CPU: %2.0lf%%"),
                            avg_point.value
                            );
//    awn_tooltip_set_text (AWN_TOOLTIP(sysmonicon_priv->tooltip),text);
    awn_icon_set_tooltip_text (AWN_ICON(object),text);
    g_free (text);
    text = g_strdup_printf("%.0lf%%",avg_point.value);
    g_object_set (priv->text_overlay,
                  "text", text,
                 NULL);  
    g_free (text);
    
    awn_graph_add_data (sysmonicon_priv->graph,list);
    awn_sysmonicon_update_icon (AWN_SYSMONICON (icon));
    for (iter = list; iter; iter=g_list_next(iter))
    {
      g_free(iter->data);
    }
    g_list_free (list);    
#undef NOW
#undef LAST
      
  }
  return TRUE;
}