summaryrefslogtreecommitdiff
path: root/applets
diff options
context:
space:
mode:
Diffstat (limited to 'applets')
-rw-r--r--applets/clock/clock-face.c12
-rw-r--r--applets/clock/clock-utils.c204
-rw-r--r--applets/clock/clock-utils.h2
-rw-r--r--applets/clock/clock.c16
-rw-r--r--applets/clock/test-system-timezone.c4
-rw-r--r--applets/fish/fish.c4
-rw-r--r--applets/notification_area/fixedtip.c4
-rw-r--r--applets/notification_area/na-tray-child.c4
-rw-r--r--applets/notification_area/na-tray-manager.c11
-rw-r--r--applets/notification_area/testtray.c6
10 files changed, 214 insertions, 53 deletions
diff --git a/applets/clock/clock-face.c b/applets/clock/clock-face.c
index 25c0b182..558201ab 100644
--- a/applets/clock/clock-face.c
+++ b/applets/clock/clock-face.c
@@ -15,10 +15,9 @@
#include <math.h>
#include <time.h>
-#include <librsvg/rsvg.h>
-
#include "clock-face.h"
#include "clock-location.h"
+#include "clock-utils.h"
static GHashTable *pixbuf_cache = NULL;
@@ -506,18 +505,13 @@ clock_face_load_face (ClockFace *this, gint width, gint height)
name = g_strconcat (ICONDIR, "/clock-face-", size_string[priv->size],
"-", daytime_string[priv->timeofday], ".svg",
NULL);
- priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name,
- width, height,
- NULL);
+ priv->face_pixbuf = clock_utils_pixbuf_from_svg_file_at_size (name, width, height);
g_free (name);
if (!priv->face_pixbuf) {
name = g_strconcat (ICONDIR, "/clock-face-",
size_string[priv->size], ".svg", NULL);
- priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name,
- width,
- height,
- NULL);
+ priv->face_pixbuf = clock_utils_pixbuf_from_svg_file_at_size (name, width, height);
g_free (name);
}
diff --git a/applets/clock/clock-utils.c b/applets/clock/clock-utils.c
index d0dfe2de..4ba93fef 100644
--- a/applets/clock/clock-utils.c
+++ b/applets/clock/clock-utils.c
@@ -34,6 +34,9 @@
#include <gtk/gtk.h>
+#include <librsvg/rsvg.h>
+#include <librsvg/rsvg-cairo.h>
+
#include "clock.h"
#include "clock-utils.h"
@@ -125,3 +128,204 @@ clock_utils_display_help (GtkWidget *widget,
gtk_widget_show (dialog);
}
}
+
+#if !GTK_CHECK_VERSION (3, 0, 0)
+/* code copied from GTK3 gdkpixbuf-drawable.c */
+static cairo_format_t
+gdk_cairo_format_for_content (cairo_content_t content)
+{
+ switch (content)
+ {
+ case CAIRO_CONTENT_COLOR:
+ return CAIRO_FORMAT_RGB24;
+ case CAIRO_CONTENT_ALPHA:
+ return CAIRO_FORMAT_A8;
+ case CAIRO_CONTENT_COLOR_ALPHA:
+ default:
+ return CAIRO_FORMAT_ARGB32;
+ }
+}
+
+static cairo_surface_t *
+gdk_cairo_surface_coerce_to_image (cairo_surface_t *surface,
+ cairo_content_t content,
+ int src_x,
+ int src_y,
+ int width,
+ int height)
+{
+ cairo_surface_t *copy;
+ cairo_t *cr;
+
+ copy = cairo_image_surface_create (gdk_cairo_format_for_content (content),
+ width,
+ height);
+
+ cr = cairo_create (copy);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ cairo_set_source_surface (cr, surface, -src_x, -src_y);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+
+ return copy;
+}
+
+static void
+convert_alpha (guchar *dest_data,
+ int dest_stride,
+ guchar *src_data,
+ int src_stride,
+ int src_x,
+ int src_y,
+ int width,
+ int height)
+{
+ int x, y;
+
+ src_data += src_stride * src_y + src_x * 4;
+
+ for (y = 0; y < height; y++) {
+ guint32 *src = (guint32 *) src_data;
+
+ for (x = 0; x < width; x++) {
+ guint alpha = src[x] >> 24;
+
+ if (alpha == 0)
+ {
+ dest_data[x * 4 + 0] = 0;
+ dest_data[x * 4 + 1] = 0;
+ dest_data[x * 4 + 2] = 0;
+ }
+ else
+ {
+ dest_data[x * 4 + 0] = (((src[x] & 0xff0000) >> 16) * 255 + alpha / 2) / alpha;
+ dest_data[x * 4 + 1] = (((src[x] & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha;
+ dest_data[x * 4 + 2] = (((src[x] & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha;
+ }
+ dest_data[x * 4 + 3] = alpha;
+ }
+
+ src_data += src_stride;
+ dest_data += dest_stride;
+ }
+}
+
+static void
+convert_no_alpha (guchar *dest_data,
+ int dest_stride,
+ guchar *src_data,
+ int src_stride,
+ int src_x,
+ int src_y,
+ int width,
+ int height)
+{
+ int x, y;
+
+ src_data += src_stride * src_y + src_x * 4;
+
+ for (y = 0; y < height; y++) {
+ guint32 *src = (guint32 *) src_data;
+
+ for (x = 0; x < width; x++) {
+ dest_data[x * 3 + 0] = src[x] >> 16;
+ dest_data[x * 3 + 1] = src[x] >> 8;
+ dest_data[x * 3 + 2] = src[x];
+ }
+
+ src_data += src_stride;
+ dest_data += dest_stride;
+ }
+}
+
+GdkPixbuf *
+gdk_pixbuf_get_from_surface (cairo_surface_t *surface,
+ gint src_x,
+ gint src_y,
+ gint width,
+ gint height)
+{
+ cairo_content_t content;
+ GdkPixbuf *dest;
+
+ /* General sanity checks */
+ g_return_val_if_fail (surface != NULL, NULL);
+ g_return_val_if_fail (width > 0 && height > 0, NULL);
+
+ content = cairo_surface_get_content (surface) | CAIRO_CONTENT_COLOR;
+ dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+ !!(content & CAIRO_CONTENT_ALPHA),
+ 8,
+ width, height);
+
+ if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE &&
+ cairo_image_surface_get_format (surface) == gdk_cairo_format_for_content (content))
+ surface = cairo_surface_reference (surface);
+ else
+ {
+ surface = gdk_cairo_surface_coerce_to_image (surface, content,
+ src_x, src_y,
+ width, height);
+ src_x = 0;
+ src_y = 0;
+ }
+ cairo_surface_flush (surface);
+ if (cairo_surface_status (surface) || dest == NULL)
+ {
+ cairo_surface_destroy (surface);
+ return NULL;
+ }
+
+ if (gdk_pixbuf_get_has_alpha (dest))
+ convert_alpha (gdk_pixbuf_get_pixels (dest),
+ gdk_pixbuf_get_rowstride (dest),
+ cairo_image_surface_get_data (surface),
+ cairo_image_surface_get_stride (surface),
+ src_x, src_y,
+ width, height);
+ else
+ convert_no_alpha (gdk_pixbuf_get_pixels (dest),
+ gdk_pixbuf_get_rowstride (dest),
+ cairo_image_surface_get_data (surface),
+ cairo_image_surface_get_stride (surface),
+ src_x, src_y,
+ width, height);
+
+ cairo_surface_destroy (surface);
+ return dest;
+}
+#endif
+
+GdkPixbuf *
+clock_utils_pixbuf_from_svg_file_at_size (const char *name, int width, int height)
+{
+ RsvgHandle *handle = NULL;
+ RsvgDimensionData svg_dimensions;
+ GdkPixbuf *pixbuf = NULL;
+ cairo_surface_t *surface = NULL;
+ cairo_matrix_t matrix;
+ cairo_t *cr = NULL;
+
+ handle = rsvg_handle_new_from_file (name, NULL);
+ if (!handle)
+ return NULL;
+
+ rsvg_handle_get_dimensions (handle, &svg_dimensions);
+
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ cr = cairo_create (surface);
+ cairo_matrix_init_scale (&matrix,
+ ((double) width / svg_dimensions.width),
+ ((double) height / svg_dimensions.height));
+ cairo_transform (cr, &matrix);
+ rsvg_handle_render_cairo (handle, cr);
+ cairo_destroy (cr);
+
+ pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, width, height);
+ cairo_surface_destroy (surface);
+
+ rsvg_handle_close (handle, NULL);
+
+ return pixbuf;
+}
+
diff --git a/applets/clock/clock-utils.h b/applets/clock/clock-utils.h
index da54094f..647f7222 100644
--- a/applets/clock/clock-utils.h
+++ b/applets/clock/clock-utils.h
@@ -50,6 +50,8 @@ void clock_utils_display_help (GtkWidget *widget,
const char *doc_id,
const char *link_id);
+GdkPixbuf * clock_utils_pixbuf_from_svg_file_at_size (const char *name, int width, int height);
+
#ifdef __cplusplus
}
#endif
diff --git a/applets/clock/clock.c b/applets/clock/clock.c
index 4592698e..efaba2fd 100644
--- a/applets/clock/clock.c
+++ b/applets/clock/clock.c
@@ -186,7 +186,9 @@ struct _ClockData {
/* Used to count the number of clock instances. It's there to know when we
* should free resources that are shared. */
+/* FIXME unused variable, remove?
static int clock_numbers = 0;
+*/
static void update_clock (ClockData * cd);
static void update_tooltip (ClockData * cd);
@@ -2907,7 +2909,6 @@ temperature_combo_changed (GtkComboBox *combo, ClockData *cd)
{
int value;
int old_value;
- const gchar *str;
value = gtk_combo_box_get_active (combo) + 2;
old_value = cd->temperature_unit;
@@ -2923,7 +2924,6 @@ speed_combo_changed (GtkComboBox *combo, ClockData *cd)
{
int value;
int old_value;
- const gchar *str;
value = gtk_combo_box_get_active (combo) + 2;
old_value = cd->speed_unit;
@@ -2960,9 +2960,7 @@ fill_prefs_window (ClockData *cd)
GtkCellRenderer *renderer;
GtkTreeViewColumn *col;
GtkListStore *store;
-#if GTK_CHECK_VERSION (3, 0, 0)
GtkTreeIter iter;
-#endif
int i;
/* Set the 12 hour / 24 hour widget */
@@ -3025,14 +3023,9 @@ fill_prefs_window (ClockData *cd)
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
for (i = 0; temperatures[i] != -1; i++)
-#if GTK_CHECK_VERSION (3, 0, 0)
gtk_list_store_insert_with_values (store, &iter, -1,
0, mateweather_prefs_get_temp_display_name (temperatures[i]),
-1);
-#else
- gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
- mateweather_prefs_get_temp_display_name (temperatures[i]));
-#endif
if (cd->temperature_unit > 0)
gtk_combo_box_set_active (GTK_COMBO_BOX (widget),
@@ -3049,14 +3042,9 @@ fill_prefs_window (ClockData *cd)
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
for (i = 0; speeds[i] != -1; i++)
-#if GTK_CHECK_VERSION (3, 0, 0)
gtk_list_store_insert_with_values (store, &iter, -1,
0, mateweather_prefs_get_speed_display_name (speeds[i]),
-1);
-#else
- gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
- mateweather_prefs_get_speed_display_name (speeds[i]));
-#endif
if (cd->speed_unit > 0)
gtk_combo_box_set_active (GTK_COMBO_BOX (widget),
diff --git a/applets/clock/test-system-timezone.c b/applets/clock/test-system-timezone.c
index 8e3e26af..79084618 100644
--- a/applets/clock/test-system-timezone.c
+++ b/applets/clock/test-system-timezone.c
@@ -93,10 +93,6 @@ main (int argc,
retval = 0;
-#if !GLIB_CHECK_VERSION (2, 36, 0)
- g_type_init ();
-#endif
-
context = g_option_context_new ("");
g_option_context_add_main_entries (context, options, NULL);
diff --git a/applets/fish/fish.c b/applets/fish/fish.c
index c4a91d88..f9a69435 100644
--- a/applets/fish/fish.c
+++ b/applets/fish/fish.c
@@ -850,10 +850,6 @@ static void display_fortune_dialog(FishApplet* fish)
gtk_window_set_icon_name (GTK_WINDOW (fish->fortune_dialog),
FISH_ICON);
-#if !GTK_CHECK_VERSION (3, 0, 0)
- gtk_dialog_set_has_separator (
- GTK_DIALOG (fish->fortune_dialog), FALSE);
-#endif
gtk_dialog_set_default_response (
GTK_DIALOG (fish->fortune_dialog), GTK_RESPONSE_CLOSE);
diff --git a/applets/notification_area/fixedtip.c b/applets/notification_area/fixedtip.c
index 7bd61409..ded3dbb6 100644
--- a/applets/notification_area/fixedtip.c
+++ b/applets/notification_area/fixedtip.c
@@ -179,12 +179,8 @@ na_fixed_tip_position (NaFixedTip *fixedtip)
#endif
gdk_window_get_origin (parent_window, &root_x, &root_y);
-#if GTK_CHECK_VERSION(3, 0, 0)
parent_width = gdk_window_get_width(parent_window);
parent_height = gdk_window_get_height(parent_window);
-#else
- gdk_drawable_get_size(GDK_DRAWABLE(parent_window), &parent_width, &parent_height);
-#endif
screen_width = gdk_screen_get_width (screen);
screen_height = gdk_screen_get_height (screen);
diff --git a/applets/notification_area/na-tray-child.c b/applets/notification_area/na-tray-child.c
index 84fddf64..9ff5c739 100644
--- a/applets/notification_area/na-tray-child.c
+++ b/applets/notification_area/na-tray-child.c
@@ -492,11 +492,7 @@ na_tray_child_force_redraw (NaTrayChild *child)
gtk_widget_get_allocation (widget, &allocation);
xev.xexpose.type = Expose;
-#if GTK_CHECK_VERSION (3, 0, 0)
xev.xexpose.window = GDK_WINDOW_XID (plug_window);
-#else
- xev.xexpose.window = GDK_WINDOW_XWINDOW (plug_window);
-#endif
xev.xexpose.x = 0;
xev.xexpose.y = 0;
xev.xexpose.width = allocation.width;
diff --git a/applets/notification_area/na-tray-manager.c b/applets/notification_area/na-tray-manager.c
index 1a2acc7f..1483bcd0 100644
--- a/applets/notification_area/na-tray-manager.c
+++ b/applets/notification_area/na-tray-manager.c
@@ -27,11 +27,6 @@
#include "na-tray-manager.h"
#include <gtk/gtk.h>
-#if GTK_CHECK_VERSION (3, 0, 0)
-#define GDK_WINDOW_XWINDOW GDK_WINDOW_XID
-#else
-#include <gdkconfig.h>
-#endif
#include <glib/gi18n.h>
#if defined (GDK_WINDOWING_X11)
#include <gdk/gdkx.h>
@@ -646,7 +641,7 @@ na_tray_manager_set_orientation_property (NaTrayManager *manager)
SYSTEM_TRAY_ORIENTATION_VERT;
XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
- GDK_WINDOW_XWINDOW (window),
+ GDK_WINDOW_XID (window),
orientation_atom,
XA_CARDINAL, 32,
PropModeReplace,
@@ -706,7 +701,7 @@ na_tray_manager_set_visual_property (NaTrayManager *manager)
data[0] = XVisualIDFromVisual (xvisual);
XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
- GDK_WINDOW_XWINDOW (window),
+ GDK_WINDOW_XID (window),
visual_atom,
XA_VISUALID, 32,
PropModeReplace,
@@ -784,7 +779,7 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager,
xev.data.l[0] = timestamp;
xev.data.l[1] = gdk_x11_atom_to_xatom_for_display (display,
manager->selection_atom);
- xev.data.l[2] = GDK_WINDOW_XWINDOW (window);
+ xev.data.l[2] = GDK_WINDOW_XID (window);
xev.data.l[3] = 0; /* manager specific data */
xev.data.l[4] = 0; /* manager specific data */
diff --git a/applets/notification_area/testtray.c b/applets/notification_area/testtray.c
index 9feed828..f19663cd 100644
--- a/applets/notification_area/testtray.c
+++ b/applets/notification_area/testtray.c
@@ -162,15 +162,9 @@ create_tray_on_screen (GdkScreen *screen,
label = gtk_label_new_with_mnemonic ("_Orientation:");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-#if GTK_CHECK_VERSION (3, 0, 0)
combo = gtk_combo_box_text_new ();
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Horizontal");
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Vertical");
-#else
- combo = gtk_combo_box_new_text ();
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Horizontal");
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Vertical");
-#endif
g_signal_connect (combo, "changed",
G_CALLBACK (orientation_changed_cb), data);
gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);