From f3324cd9f0be0a66c71f2911f38b617f57bd4ecb Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Wed, 17 Jul 2013 18:02:47 +0200 Subject: GTK3 compatibility --- libmatekbd/matekbd-indicator-config.c | 4 ++ libmatekbd/matekbd-keyboard-drawing.c | 91 +++++++++++++++++++++++++++-------- libmatekbd/matekbd-keyboard-drawing.h | 6 ++- 3 files changed, 78 insertions(+), 23 deletions(-) diff --git a/libmatekbd/matekbd-indicator-config.c b/libmatekbd/matekbd-indicator-config.c index 95441c1..faa9b40 100644 --- a/libmatekbd/matekbd-indicator-config.c +++ b/libmatekbd/matekbd-indicator-config.c @@ -172,7 +172,11 @@ matekbd_indicator_config_get_images_file (MatekbdIndicatorConfig * if (icon_info != NULL) { image_file = g_strdup (gtk_icon_info_get_filename (icon_info)); +#if GTK_CHECK_VERSION (3, 8, 0) + g_object_unref (icon_info); +#else gtk_icon_info_free (icon_info); +#endif } return image_file; diff --git a/libmatekbd/matekbd-keyboard-drawing.c b/libmatekbd/matekbd-keyboard-drawing.c index d28834f..82c962f 100644 --- a/libmatekbd/matekbd-keyboard-drawing.c +++ b/libmatekbd/matekbd-keyboard-drawing.c @@ -21,6 +21,9 @@ #include #include #include +#if GTK_CHECK_VERSION (3, 0, 0) +#include +#endif #include #include #include @@ -1301,10 +1304,22 @@ static gboolean create_cairo (MatekbdKeyboardDrawing * drawing) { GtkStateType state; - if (drawing == NULL || drawing->pixmap == NULL) + if (drawing == NULL) + return FALSE; +#if GTK_CHECK_VERSION (3, 0, 0) + if (drawing->surface == NULL) + return FALSE; +#else + if (drawing->pixmap == NULL) return FALSE; +#endif + drawing->renderContext->cr = +#if GTK_CHECK_VERSION (3, 0, 0) + cairo_create (drawing->surface); +#else gdk_cairo_create (GDK_DRAWABLE (drawing->pixmap)); +#endif state = gtk_widget_get_state (GTK_WIDGET (drawing)); drawing->renderContext->dark_color = @@ -1332,9 +1347,15 @@ draw_keyboard (MatekbdKeyboardDrawing * drawing) gtk_widget_get_allocation (GTK_WIDGET (drawing), &allocation); +#if GTK_CHECK_VERSION (3, 0, 0) + drawing->surface = + gdk_window_create_similar_surface (gtk_widget_get_window (GTK_WIDGET (drawing)), + CAIRO_CONTENT_COLOR, allocation.width, allocation.height); +#else drawing->pixmap = gdk_pixmap_new (gtk_widget_get_window (GTK_WIDGET (drawing)), allocation.width, allocation.height, -1); +#endif if (create_cairo (drawing)) { /* blank background */ @@ -1381,17 +1402,33 @@ free_render_context (MatekbdKeyboardDrawing * drawing) static gboolean expose_event (GtkWidget * widget, - GdkEventExpose * event, MatekbdKeyboardDrawing * drawing) +#if GTK_CHECK_VERSION (3, 0, 0) + cairo_t *cr, +#else + GdkEventExpose * event, +#endif + MatekbdKeyboardDrawing * drawing) { GtkAllocation allocation; + +#if !GTK_CHECK_VERSION (3, 0, 0) cairo_t *cr; +#endif if (!drawing->xkb) return FALSE; +#if GTK_CHECK_VERSION (3, 0, 0) + if (drawing->surface == NULL) +#else if (drawing->pixmap == NULL) +#endif return FALSE; +#if GTK_CHECK_VERSION (3, 0, 0) + cairo_set_source_surface (cr, drawing->surface, 0, 0); + cairo_paint (cr); +#else cr = gdk_cairo_create (event->window); gdk_cairo_region (cr, event->region); cairo_clip (cr); @@ -1400,13 +1437,22 @@ expose_event (GtkWidget * widget, cairo_paint (cr); cairo_destroy (cr); +#endif if (gtk_widget_has_focus (widget)) { gtk_widget_get_allocation (widget, &allocation); gtk_paint_focus (gtk_widget_get_style (widget), +#if GTK_CHECK_VERSION (3, 0, 0) + cr, +#else gtk_widget_get_window (widget), +#endif gtk_widget_get_state (widget), +#if GTK_CHECK_VERSION (3, 0, 0) + widget, "keyboard-drawing", +#else &event->area, widget, "keyboard-drawing", +#endif 0, 0, allocation.width, allocation.height); } @@ -1469,10 +1515,17 @@ size_allocate (GtkWidget * widget, { MatekbdKeyboardDrawingRenderContext *context = drawing->renderContext; +#if GTK_CHECK_VERSION (3, 0, 0) + if (drawing->surface) { + cairo_surface_destroy (drawing->surface); + drawing->surface = NULL; + } +#else if (drawing->pixmap) { g_object_unref (drawing->pixmap); drawing->pixmap = NULL; } +#endif if (!context_setup_scaling (context, drawing, allocation->width, allocation->height, @@ -1973,7 +2026,13 @@ destroy (MatekbdKeyboardDrawing * drawing) drawing->idle_redraw = 0; } +#if GTK_CHECK_VERSION (3, 0, 0) + if (drawing->surface != NULL) { + cairo_surface_destroy (drawing->surface); + } +#else g_object_unref (drawing->pixmap); +#endif } static void @@ -2010,7 +2069,11 @@ matekbd_keyboard_drawing_init (MatekbdKeyboardDrawing * drawing) drawing->screen_num = gdk_screen_get_number (gdk_screen_get_default ()); +#if GTK_CHECK_VERSION (3, 0, 0) + drawing->surface = NULL; +#else drawing->pixmap = NULL; +#endif alloc_render_context (drawing); drawing->keyboard_items = NULL; @@ -2071,7 +2134,11 @@ matekbd_keyboard_drawing_init (MatekbdKeyboardDrawing * drawing) GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_FOCUS_CHANGE_MASK); +#if GTK_CHECK_VERSION (3, 0, 0) + g_signal_connect (G_OBJECT (drawing), "draw", +#else g_signal_connect (G_OBJECT (drawing), "expose-event", +#endif G_CALLBACK (expose_event), drawing); g_signal_connect_after (G_OBJECT (drawing), "key-press-event", G_CALLBACK (key_event), drawing); @@ -2156,24 +2223,6 @@ matekbd_keyboard_drawing_set_mods (MatekbdKeyboardDrawing * drawing, guint mods) } } -/* returns a pixbuf with the keyboard drawing at the current pixel size - * (which can then be saved to disk, etc) */ -GdkPixbuf * -matekbd_keyboard_drawing_get_pixbuf (MatekbdKeyboardDrawing * drawing) -{ - MatekbdKeyboardDrawingRenderContext *context = drawing->renderContext; - - if (drawing->pixmap == NULL) - draw_keyboard (drawing); - - return gdk_pixbuf_get_from_drawable (NULL, drawing->pixmap, NULL, - 0, 0, 0, 0, - xkb_to_pixmap_coord (context, - drawing->xkb->geom->width_mm), - xkb_to_pixmap_coord (context, - drawing->xkb->geom->height_mm)); -} - /** * matekbd_keyboard_drawing_render: * @drawing: keyboard layout to render @@ -2417,7 +2466,7 @@ matekbd_keyboard_drawing_draw_page (GtkPrintOperation * operation, gdouble dpi_y = gtk_print_context_get_dpi_y (context); gchar *header; - gtk_print_operation_set_unit (operation, GTK_PIXELS); + gtk_print_operation_set_unit (operation, GTK_UNIT_PIXEL); header = g_strdup_printf (_("Keyboard layout \"%s\"\n" diff --git a/libmatekbd/matekbd-keyboard-drawing.h b/libmatekbd/matekbd-keyboard-drawing.h index e9c2ef9..ba74324 100644 --- a/libmatekbd/matekbd-keyboard-drawing.h +++ b/libmatekbd/matekbd-keyboard-drawing.h @@ -125,7 +125,11 @@ struct _MatekbdKeyboardDrawing { GtkDrawingArea parent; +#if GTK_CHECK_VERSION (3, 0, 0) + cairo_surface_t *surface; +#else GdkPixmap *pixmap; +#endif XkbDescRec *xkb; gboolean xkbOnDisplay; guint l3mod; @@ -171,8 +175,6 @@ struct _MatekbdKeyboardDrawingClass { GType matekbd_keyboard_drawing_get_type (void); GtkWidget *matekbd_keyboard_drawing_new (void); -GdkPixbuf *matekbd_keyboard_drawing_get_pixbuf (MatekbdKeyboardDrawing * - kbdrawing); gboolean matekbd_keyboard_drawing_render (MatekbdKeyboardDrawing * kbdrawing, cairo_t * cr, PangoLayout * layout, -- cgit v1.2.1