static void on_icon_changed(WnckWindow *controlwindow, WindowckPlugin *wckp) { GdkPixbuf *pixbuf = NULL; GdkPixbuf *grayscale = NULL; if (!controlwindow) { xfce_panel_image_clear(XFCE_PANEL_IMAGE (wckp->icon->symbol)); } else if (wckp->prefs->show_on_desktop) { gtk_widget_set_sensitive (wckp->icon->symbol, TRUE); if (wnck_window_get_window_type (controlwindow) == WNCK_WINDOW_DESKTOP) { if (!wnck_window_is_active(controlwindow)) gtk_widget_set_sensitive (wckp->icon->symbol, FALSE); xfce_panel_image_set_from_source (XFCE_PANEL_IMAGE (wckp->icon->symbol),GTK_STOCK_HOME); } } if (controlwindow && wnck_window_get_window_type (controlwindow) != WNCK_WINDOW_DESKTOP) { /* This only returns a pointer - it SHOULDN'T be unrefed! */ if (XFCE_PANEL_IS_SMALL) pixbuf = wnck_window_get_mini_icon(controlwindow); else pixbuf = wnck_window_get_icon(controlwindow); /* leave when there is no valid pixbuf */ if (G_UNLIKELY (pixbuf == NULL)) { xfce_panel_image_clear (XFCE_PANEL_IMAGE (wckp->icon->symbol)); return; } if (!wnck_window_is_active(controlwindow)) { /* icon color is set to grayscale */ grayscale = gdk_pixbuf_copy(pixbuf); gdk_pixbuf_saturate_and_pixelate(grayscale, grayscale, 0, FALSE); if (G_UNLIKELY (grayscale != NULL)) pixbuf = grayscale; } xfce_panel_image_set_from_pixbuf(XFCE_PANEL_IMAGE (wckp->icon->symbol), pixbuf); } if (grayscale != NULL && grayscale != pixbuf) g_object_unref (G_OBJECT (grayscale)); }
static void xfce_panel_image_finalize (GObject *object) { xfce_panel_image_clear (XFCE_PANEL_IMAGE (object)); (*G_OBJECT_CLASS (xfce_panel_image_parent_class)->finalize) (object); }
/** * xfce_panel_image_set_from_source: * @image : an #XfcePanelImage. * @source : source of the image. This can be an absolute path or * an icon-name or %NULL. * * See xfce_panel_image_new_from_source() for details. * * Since: 4.8 **/ void xfce_panel_image_set_from_source (XfcePanelImage *image, const gchar *source) { g_return_if_fail (XFCE_IS_PANEL_IMAGE (image)); g_return_if_fail (source == NULL || *source != '\0'); xfce_panel_image_clear (image); image->priv->source = g_strdup (source); gtk_widget_queue_resize (GTK_WIDGET (image)); }
/** * xfce_panel_image_set_from_pixbuf: * @image : an #XfcePanelImage. * @pixbuf : a #GdkPixbuf, or %NULL. * * See xfce_panel_image_new_from_pixbuf() for details. * * Since: 4.8 **/ void xfce_panel_image_set_from_pixbuf (XfcePanelImage *image, GdkPixbuf *pixbuf) { g_return_if_fail (XFCE_IS_PANEL_IMAGE (image)); g_return_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf)); xfce_panel_image_clear (image); /* set the new pixbuf, scale it to the maximum size if needed */ image->priv->pixbuf = xfce_panel_image_scale_pixbuf (pixbuf, MAX_PIXBUF_SIZE, MAX_PIXBUF_SIZE); gtk_widget_queue_resize (GTK_WIDGET (image)); }