diff options
Diffstat (limited to 'eel')
| -rw-r--r-- | eel/eel-accessibility.c | 15 | ||||
| -rw-r--r-- | eel/eel-background.c | 43 | ||||
| -rw-r--r-- | eel/eel-canvas-rect-ellipse.c | 17 | ||||
| -rw-r--r-- | eel/eel-canvas.c | 41 | ||||
| -rw-r--r-- | eel/eel-editable-label.c | 46 | ||||
| -rw-r--r-- | eel/eel-editable-label.h | 1 | ||||
| -rw-r--r-- | eel/eel-gtk-extensions.c | 68 | ||||
| -rw-r--r-- | eel/eel-labeled-image.c | 215 |
8 files changed, 195 insertions, 251 deletions
diff --git a/eel/eel-accessibility.c b/eel/eel-accessibility.c index 94c429a3..0d9707ad 100644 --- a/eel/eel-accessibility.c +++ b/eel/eel-accessibility.c @@ -218,11 +218,16 @@ eel_accessible_text_get_type (void) { const GTypeInfo tinfo = { - sizeof (AtkTextIface), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) NULL, - (GClassFinalizeFunc) NULL + sizeof (AtkTextIface), /* class_size */ + NULL, /* base_init */ + NULL, /* base_finalize */ + NULL, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + 0, /* instance_size */ + 0, /* n_preallocs */ + NULL, /* instance_init */ + NULL /* value_table */ }; type = g_type_register_static ( diff --git a/eel/eel-background.c b/eel/eel-background.c index ae585d6a..ceaa972f 100644 --- a/eel/eel-background.c +++ b/eel/eel-background.c @@ -105,7 +105,7 @@ free_background_surface (EelBackground *self) it will live forever, so we need to kill it manually. If set as root background it will be killed next time the background is changed. */ - if (self->details->unset_root_surface) + if (GDK_IS_X11_DISPLAY (gdk_display_get_default()) && (self->details->unset_root_surface)) { XKillClient (cairo_xlib_surface_get_display (surface), cairo_xlib_surface_get_drawable (surface)); @@ -311,9 +311,20 @@ drawable_get_adjusted_size (EelBackground *self, if (self->details->is_desktop) { GdkScreen *screen = gtk_widget_get_screen (self->details->widget); - gint scale = gtk_widget_get_scale_factor (self->details->widget); - *width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; - *height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + GdkDisplay *display = gdk_screen_get_display (screen); + if (GDK_IS_X11_DISPLAY (display)) + { + gint scale = gtk_widget_get_scale_factor (self->details->widget); + *width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + *height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + } + else { + GdkRectangle workarea = {0}; + gdk_monitor_get_workarea(gdk_display_get_monitor_at_window(gdk_display_get_default(), + gtk_widget_get_window (self->details->widget)), &workarea); + *width = workarea.width; + *height = workarea.height; + } } else { @@ -413,17 +424,18 @@ set_root_surface (EelBackground *self, GdkScreen *screen) { eel_background_ensure_realized (self); + GdkDisplay *display = gdk_screen_get_display (screen); if (self->details->use_common_surface) { self->details->unset_root_surface = FALSE; } else { int width, height; drawable_get_adjusted_size (self, &width, &height); - self->details->bg_surface = mate_bg_create_surface (self->details->bg, window, - width, height, TRUE); + if ((GDK_IS_X11_DISPLAY (display)) && (self->details->bg_surface == NULL)) + self->details->bg_surface = mate_bg_create_surface (self->details->bg, window, + width, height, TRUE); } - - if (self->details->bg_surface != NULL) + if ((GDK_IS_X11_DISPLAY (display)) && (self->details->bg_surface != NULL)) mate_bg_set_surface_as_root (screen, self->details->bg_surface); } @@ -638,7 +650,7 @@ widget_realized_setup (GtkWidget *widget, } GdkScreen *screen = gtk_widget_get_screen (widget); - GdkWindow *window = gdk_screen_get_root_window (screen); + GdkDisplay *display = gdk_screen_get_display (screen); if (self->details->screen_size_handler > 0) { @@ -654,9 +666,16 @@ widget_realized_setup (GtkWidget *widget, self->details->screen_monitors_handler = g_signal_connect (screen, "monitors-changed", G_CALLBACK (screen_size_changed), self); - self->details->use_common_surface = - (gdk_window_get_visual (window) == gtk_widget_get_visual (widget)) ? TRUE : FALSE; - + if (GDK_IS_X11_DISPLAY (display)) + { + GdkWindow *window = gdk_screen_get_root_window (screen); + self->details->use_common_surface = + (gdk_window_get_visual (window) == gtk_widget_get_visual (widget)) ? TRUE : FALSE; + } + else /*Wayland is always composited but never has a root window*/ + { + self->details->use_common_surface = FALSE; + } init_fade (self); } diff --git a/eel/eel-canvas-rect-ellipse.c b/eel/eel-canvas-rect-ellipse.c index 9b2feba4..7ca56a46 100644 --- a/eel/eel-canvas-rect-ellipse.c +++ b/eel/eel-canvas-rect-ellipse.c @@ -101,7 +101,8 @@ eel_canvas_re_get_type (void) NULL, /* class_data */ sizeof (EelCanvasRE), 0, /* n_preallocs */ - (GInstanceInitFunc) eel_canvas_re_init + (GInstanceInitFunc) eel_canvas_re_init, + NULL /* value_table */ }; re_type = g_type_register_static (eel_canvas_item_get_type (), @@ -204,7 +205,7 @@ eel_canvas_re_set_fill (EelCanvasRE *re, gboolean fill_set) { if (re->fill_set != fill_set) { - re->fill_set = fill_set; + re->fill_set = (fill_set != FALSE); eel_canvas_item_request_update (EEL_CANVAS_ITEM (re)); } } @@ -214,7 +215,7 @@ eel_canvas_re_set_outline (EelCanvasRE *re, gboolean outline_set) { if (re->outline_set != outline_set) { - re->outline_set = outline_set; + re->outline_set = (outline_set != FALSE); eel_canvas_item_request_update (EEL_CANVAS_ITEM (re)); } } @@ -465,7 +466,8 @@ eel_canvas_rect_get_type (void) NULL, /* class_data */ sizeof (EelCanvasRect), 0, /* n_preallocs */ - (GInstanceInitFunc) eel_canvas_rect_init + (GInstanceInitFunc) eel_canvas_rect_init, + NULL /* value_table */ }; rect_type = g_type_register_static (eel_canvas_re_get_type (), @@ -735,7 +737,12 @@ eel_canvas_rect_update (EelCanvasItem *item, double i2w_dx, double i2w_dy, gint if (re->width_pixels) width_pixels = (int) re->width; else - width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5); + { + double pixels; + + pixels = floor (re->width * re->item.canvas->pixels_per_unit + 0.5); + width_pixels = (int) pixels; + } width_lt = width_pixels / 2; width_rb = (width_pixels + 1) / 2; diff --git a/eel/eel-canvas.c b/eel/eel-canvas.c index faf1ab69..a9d98101 100644 --- a/eel/eel-canvas.c +++ b/eel/eel-canvas.c @@ -137,7 +137,8 @@ eel_canvas_item_get_type (void) NULL, /* class_data */ sizeof (EelCanvasItem), 0, /* n_preallocs */ - (GInstanceInitFunc) eel_canvas_item_init + (GInstanceInitFunc) eel_canvas_item_init, + NULL /* value_table */ }; canvas_item_type = g_type_register_static (G_TYPE_INITIALLY_UNOWNED, @@ -1255,8 +1256,8 @@ eel_canvas_group_get_type (void) NULL, /* class_data */ sizeof (EelCanvasGroup), 0, /* n_preallocs */ - (GInstanceInitFunc) eel_canvas_group_init - + (GInstanceInitFunc) eel_canvas_group_init, + NULL /* value_table */ }; group_type = g_type_register_static (eel_canvas_item_get_type (), @@ -1851,7 +1852,8 @@ eel_canvas_get_type (void) NULL, /* class_data */ sizeof (EelCanvas), 0, /* n_preallocs */ - (GInstanceInitFunc) eel_canvas_init + (GInstanceInitFunc) eel_canvas_init, + NULL /* value_table */ }; canvas_type = g_type_register_static (gtk_layout_get_type (), @@ -2286,10 +2288,12 @@ scroll_to (EelCanvas *canvas, int cx, int cy) int scroll_width, scroll_height; int right_limit, bottom_limit; int old_zoom_xofs, old_zoom_yofs; - int changed_x = FALSE, changed_y = FALSE; + gboolean changed_x; + gboolean changed_y; int canvas_width, canvas_height; GtkAllocation allocation; GtkAdjustment *vadjustment, *hadjustment; + gdouble adjustment_value; guint width, height; gtk_widget_get_allocation (GTK_WIDGET (canvas), &allocation); @@ -2373,22 +2377,25 @@ scroll_to (EelCanvas *canvas, int cx, int cy) hadjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (canvas)); vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (canvas)); - if (((int) gtk_adjustment_get_value (hadjustment)) != cx) - { - gtk_adjustment_set_value (hadjustment, cx); - changed_x = TRUE; - } + adjustment_value = gtk_adjustment_get_value (hadjustment); + changed_x = ((int) adjustment_value) != cx; + if (changed_x) + gtk_adjustment_set_value (hadjustment, + (gdouble) cx); - if (((int) gtk_adjustment_get_value (vadjustment)) != cy) - { - gtk_adjustment_set_value (vadjustment, cy); - changed_y = TRUE; - } + adjustment_value = gtk_adjustment_get_value (vadjustment); + changed_y = ((int) adjustment_value) != cy; + if (changed_y) + gtk_adjustment_set_value (vadjustment, + (gdouble) cy); gtk_layout_get_size (&canvas->layout, &width, &height); - if ((scroll_width != (int) width )|| (scroll_height != (int) height)) + if ((scroll_width != (int) width) || + (scroll_height != (int) height)) { - gtk_layout_set_size (GTK_LAYOUT (canvas), scroll_width, scroll_height); + gtk_layout_set_size (GTK_LAYOUT (canvas), + (guint) scroll_width, + (guint) scroll_height); } /* Signal GtkLayout that it should do a redraw. */ diff --git a/eel/eel-editable-label.c b/eel/eel-editable-label.c index a3b6813b..7c4bcb38 100644 --- a/eel/eel-editable-label.c +++ b/eel/eel-editable-label.c @@ -135,7 +135,6 @@ static gboolean eel_editable_label_delete_surrounding_cb (GtkIMContext gint offset, gint n_chars, EelEditableLabel *label); -static void eel_editable_label_clear_layout (EelEditableLabel *label); static void eel_editable_label_recompute (EelEditableLabel *label); static void eel_editable_label_ensure_layout (EelEditableLabel *label, gboolean include_preedit); @@ -764,7 +763,7 @@ eel_editable_label_set_draw_outline (EelEditableLabel *label, if (label->draw_outline != draw_outline) { - label->draw_outline = draw_outline; + label->draw_outline = (draw_outline != FALSE); gtk_widget_queue_draw (GTK_WIDGET (label)); } @@ -790,7 +789,7 @@ eel_editable_label_set_line_wrap (EelEditableLabel *label, if (label->wrap != wrap) { - label->wrap = wrap; + label->wrap = (wrap != FALSE); g_object_notify (G_OBJECT (label), "wrap"); gtk_widget_queue_resize (GTK_WIDGET (label)); @@ -828,15 +827,6 @@ eel_editable_label_get_line_wrap (EelEditableLabel *label) return label->wrap; } -PangoFontDescription * -eel_editable_label_get_font_description (EelEditableLabel *label) -{ - if (label->font_desc) - return pango_font_description_copy (label->font_desc); - - return NULL; -} - void eel_editable_label_set_font_description (EelEditableLabel *label, const PangoFontDescription *desc) @@ -849,7 +839,7 @@ eel_editable_label_set_font_description (EelEditableLabel *label, else label->font_desc = NULL; - eel_editable_label_clear_layout (label); + g_clear_object (&label->layout); } static void @@ -873,29 +863,15 @@ eel_editable_label_finalize (GObject *object) g_free (label->text); label->text = NULL; - if (label->layout) - { - g_object_unref (G_OBJECT (label->layout)); - label->layout = NULL; - } + g_clear_object (&label->layout); G_OBJECT_CLASS (eel_editable_label_parent_class)->finalize (object); } static void -eel_editable_label_clear_layout (EelEditableLabel *label) -{ - if (label->layout) - { - g_object_unref (G_OBJECT (label->layout)); - label->layout = NULL; - } -} - -static void eel_editable_label_recompute (EelEditableLabel *label) { - eel_editable_label_clear_layout (label); + g_clear_object (&label->layout); eel_editable_label_check_cursor_blink (label); } @@ -962,8 +938,10 @@ eel_editable_label_ensure_layout (EelEditableLabel *label, include_preedit = include_preedit != 0; if (label->preedit_length > 0 && - include_preedit != label->layout_includes_preedit) - eel_editable_label_clear_layout (label); + include_preedit != label->layout_includes_preedit) + { + g_clear_object (&label->layout); + } widget = GTK_WIDGET (label); @@ -1000,7 +978,7 @@ eel_editable_label_ensure_layout (EelEditableLabel *label, { label->layout = gtk_widget_create_pango_layout (widget, label->text); } - label->layout_includes_preedit = include_preedit; + label->layout_includes_preedit = (include_preedit != FALSE); if (label->font_desc != NULL) pango_layout_set_font_description (label->layout, label->font_desc); @@ -1050,7 +1028,6 @@ eel_editable_label_ensure_layout (EelEditableLabel *label, else { gint wrap_width; - gint scale; pango_layout_set_width (label->layout, -1); pango_layout_get_extents (label->layout, NULL, &logical_rect); @@ -1061,10 +1038,9 @@ eel_editable_label_ensure_layout (EelEditableLabel *label, longest_paragraph = width; wrap_width = get_label_wrap_width (label); - scale = gtk_widget_get_scale_factor (widget); width = MIN (width, wrap_width); width = MIN (width, - PANGO_SCALE * (WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale + 1) / 2); + PANGO_SCALE * (gdk_screen_width () + 1) / 2); pango_layout_set_width (label->layout, width); pango_layout_get_extents (label->layout, NULL, &logical_rect); diff --git a/eel/eel-editable-label.h b/eel/eel-editable-label.h index ab5f7d1c..5664807c 100644 --- a/eel/eel-editable-label.h +++ b/eel/eel-editable-label.h @@ -129,7 +129,6 @@ extern "C" { void eel_editable_label_get_layout_offsets (EelEditableLabel *label, gint *x, gint *y); - PangoFontDescription *eel_editable_label_get_font_description (EelEditableLabel *label); void eel_editable_label_set_font_description (EelEditableLabel *label, const PangoFontDescription *desc); diff --git a/eel/eel-gtk-extensions.c b/eel/eel-gtk-extensions.c index b2a47d95..a36c579e 100644 --- a/eel/eel-gtk-extensions.c +++ b/eel/eel-gtk-extensions.c @@ -80,57 +80,56 @@ eel_gtk_window_get_geometry_string (GtkWindow *window) static void sanity_check_window_position (int *left, int *top) { - GdkScreen *screen; - gint scale; - g_assert (left != NULL); g_assert (top != NULL); - - screen = gdk_screen_get_default (); - scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen)); + GdkDisplay *display; + GdkWindow *root_window; + GdkRectangle workarea = {0}; /* Make sure the top of the window is on screen, for * draggability (might not be necessary with all window managers, * but seems reasonable anyway). Make sure the top of the window * isn't off the bottom of the screen, or so close to the bottom * that it might be obscured by the panel. + * */ - *top = CLAMP (*top, 0, HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - MINIMUM_ON_SCREEN_HEIGHT); - - /* FIXME bugzilla.eazel.com 669: - * If window has negative left coordinate, set_uposition sends it - * somewhere else entirely. Not sure what level contains this bug (XWindows?). - * Hacked around by pinning the left edge to zero, which just means you - * can't set a window to be partly off the left of the screen using - * this routine. - */ - /* Make sure the left edge of the window isn't off the right edge of - * the screen, or so close to the right edge that it might be - * obscured by the panel. - */ - *left = CLAMP (*left, 0, WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - MINIMUM_ON_SCREEN_WIDTH); + display = gdk_display_get_default (); + /*This is x11 only, there is no root window in wayland*/ + if (GDK_IS_X11_DISPLAY (display)) + { + root_window = gdk_screen_get_root_window (gdk_screen_get_default()); + gdk_monitor_get_workarea(gdk_display_get_monitor_at_window (display, root_window), &workarea); + *top = CLAMP (*top, 0, workarea.height - MINIMUM_ON_SCREEN_HEIGHT); + + /* FIXME bugzilla.eazel.com 669: + * If window has negative left coordinate, set_uposition sends it + * somewhere else entirely. Not sure what level contains this bug (XWindows?). + * Hacked around by pinning the left edge to zero, which just means you + * can't set a window to be partly off the left of the screen using + * this routine. + */ + /* Make sure the left edge of the window isn't off the right edge of + * the screen, or so close to the right edge that it might be + * obscured by the panel. + */ + *left = CLAMP (*left, 0, workarea.width - MINIMUM_ON_SCREEN_WIDTH); + } } static void sanity_check_window_dimensions (guint *width, guint *height) { - GdkScreen *screen; - gint scale; - g_assert (width != NULL); g_assert (height != NULL); - screen = gdk_screen_get_default (); - scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen)); - /* Pin the size of the window to the screen, so we don't end up in * a state where the window is so big essential parts of it can't * be reached (might not be necessary with all window managers, * but seems reasonable anyway). */ - *width = MIN (*width, WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale); - *height = MIN (*height, HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale); -} + *width = MIN ((int)*width, gdk_screen_width()); + *height = MIN ((int)*height, gdk_screen_height()); + } /** * eel_gtk_window_set_initial_geometry: @@ -156,7 +155,9 @@ eel_gtk_window_set_initial_geometry (GtkWindow *window, guint width, guint height) { + GdkScreen *screen; int real_left, real_top; + int screen_width, screen_height; g_return_if_fail (GTK_IS_WINDOW (window)); @@ -168,17 +169,12 @@ eel_gtk_window_set_initial_geometry (GtkWindow *window, if ((geometry_flags & EEL_GDK_X_VALUE) && (geometry_flags & EEL_GDK_Y_VALUE)) { - GdkScreen *screen; - int screen_width, screen_height; - int scale; - real_left = left; real_top = top; screen = gtk_window_get_screen (window); - scale = gtk_widget_get_scale_factor (GTK_WIDGET (window)); - screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; - screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + screen_width = gdk_screen_get_width (screen); + screen_height = gdk_screen_get_height (screen); /* This is sub-optimal. GDK doesn't allow us to set win_gravity * to South/East types, which should be done if using negative diff --git a/eel/eel-labeled-image.c b/eel/eel-labeled-image.c index 838da9cb..200f1e41 100644 --- a/eel/eel-labeled-image.c +++ b/eel/eel-labeled-image.c @@ -90,6 +90,10 @@ static GType eel_labeled_image_toggle_button_get_type (void); /* GtkWidgetClass methods */ static GType eel_labeled_image_accessible_get_type (void); +static GType eel_labeled_image_button_accessible_get_type (void); +static GType eel_labeled_image_check_button_accessible_get_type (void); +static GType eel_labeled_image_toggle_button_accessible_get_type (void); +static GType eel_labeled_image_radio_button_accessible_get_type (void); /* Private EelLabeledImage methods */ static EelDimensions labeled_image_get_image_dimensions (const EelLabeledImage *labeled_image); @@ -2178,17 +2182,6 @@ eel_labeled_image_set_can_focus (EelLabeledImage *labeled_image, gtk_widget_set_can_focus (GTK_WIDGET (labeled_image), can_focus); } -static AtkObjectClass *a11y_parent_class = NULL; - -static void -eel_labeled_image_accessible_initialize (AtkObject *accessible, - gpointer widget) -{ - a11y_parent_class->initialize (accessible, widget); - atk_object_set_role (accessible, ATK_ROLE_IMAGE); - -} - static EelLabeledImage * get_image (gpointer object) { @@ -2248,29 +2241,27 @@ eel_labeled_image_accessible_image_interface_init (AtkImageIface *iface) iface->get_image_size = eel_labeled_image_accessible_image_get_size; } -typedef struct _EelLabeledImageAccessible EelLabeledImageAccessible; -typedef struct _EelLabeledImageAccessibleClass EelLabeledImageAccessibleClass; - -struct _EelLabeledImageAccessible -{ - GtkContainerAccessible parent; -}; - -struct _EelLabeledImageAccessibleClass -{ - GtkContainerAccessibleClass parent_class; -}; +typedef GtkContainerAccessible EelLabeledImageAccessible; +typedef GtkContainerAccessibleClass EelLabeledImageAccessibleClass; G_DEFINE_TYPE_WITH_CODE (EelLabeledImageAccessible, eel_labeled_image_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE, G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, eel_labeled_image_accessible_image_interface_init)); + +static void +eel_labeled_image_accessible_initialize (AtkObject *accessible, + gpointer widget) +{ + ATK_OBJECT_CLASS (eel_labeled_image_accessible_parent_class)->initialize (accessible, widget); + atk_object_set_role (accessible, ATK_ROLE_IMAGE); +} + static void eel_labeled_image_accessible_class_init (EelLabeledImageAccessibleClass *klass) { AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - a11y_parent_class = g_type_class_peek_parent (klass); atk_class->get_name = eel_labeled_image_accessible_get_name; atk_class->initialize = eel_labeled_image_accessible_initialize; @@ -2281,119 +2272,63 @@ eel_labeled_image_accessible_init (EelLabeledImageAccessible *accessible) { } -static void -eel_labeled_image_button_class_init (GtkWidgetClass *klass) -{ -} - -static GType -eel_labeled_image_button_get_type (void) -{ - static GType type = 0; - - if (!type) - { - GTypeInfo info = - { - sizeof (GtkButtonClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) eel_labeled_image_button_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkButton), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL - }; - - type = g_type_register_static - (GTK_TYPE_BUTTON, - "EelLabeledImageButton", &info, 0); - } - - return type; -} - -static GType -eel_labeled_image_check_button_get_type (void) -{ - static GType type = 0; - - if (!type) - { - GTypeInfo info = - { - sizeof (GtkCheckButtonClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) eel_labeled_image_button_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkCheckButton), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL - }; - - type = g_type_register_static - (GTK_TYPE_CHECK_BUTTON, - "EelLabeledImageCheckButton", &info, 0); - } - - return type; -} - -static GType -eel_labeled_image_toggle_button_get_type (void) -{ - static GType type = 0; - - if (!type) - { - GTypeInfo info = - { - sizeof (GtkToggleButtonClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) eel_labeled_image_button_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkToggleButton), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL - }; - - type = g_type_register_static - (GTK_TYPE_TOGGLE_BUTTON, - "EelLabeledImageToggleButton", &info, 0); - } - - return type; -} - -static GType -eel_labeled_image_radio_button_get_type (void) -{ - static GType type = 0; - - if (!type) - { - GTypeInfo info = - { - sizeof (GtkRadioButtonClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) eel_labeled_image_button_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkRadioButton), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL - }; - - type = g_type_register_static - (GTK_TYPE_RADIO_BUTTON, - "EelLabeledImageRadioButton", &info, 0); - } - - return type; -} +/* Defines GObject types for the various buttons. This takes care of creating + * the related accessible type as well and to plug it to the base + * EelLabeledImageAccessible which handles those cases as well -- having + * different accessible types for each of those is only required to inherit + * from the correct GTK accessible parent. */ + +#define DEFINE_LABELLED_IMAGE_BUTTON_TYPE(TN, t_n, TP, T_P, ATP, A_T_P) \ + typedef TP TN; \ + typedef TP##Class TN##Class; \ + typedef ATP TN##Accessible; \ + typedef ATP##Class TN##AccessibleClass; \ + G_DEFINE_TYPE (TN, t_n, T_P) \ + G_DEFINE_TYPE_WITH_CODE (TN##Accessible, t_n##_accessible, A_T_P, \ + G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, \ + eel_labeled_image_accessible_image_interface_init)) \ + static void t_n##_class_init(TN##Class *klass) \ + { \ + gtk_widget_class_set_accessible_type (GTK_WIDGET_CLASS (klass), \ + t_n##_accessible_get_type ()); \ + } \ + static void t_n##_init (TN *obj) \ + { \ + } \ + static void t_n##_accessible_class_init(TN##AccessibleClass *klass) \ + { \ + AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); \ + atk_class->get_name = eel_labeled_image_accessible_get_name; \ + } \ + static void t_n##_accessible_init (TN##Accessible *obj) \ + { \ + } + + +DEFINE_LABELLED_IMAGE_BUTTON_TYPE (EelLabeledImageButton, + eel_labeled_image_button, + GtkButton, + GTK_TYPE_BUTTON, + GtkButtonAccessible, + GTK_TYPE_BUTTON_ACCESSIBLE) + +DEFINE_LABELLED_IMAGE_BUTTON_TYPE (EelLabeledImageCheckButton, + eel_labeled_image_check_button, + GtkCheckButton, + GTK_TYPE_CHECK_BUTTON, + GtkToggleButtonAccessible, + GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE) + +DEFINE_LABELLED_IMAGE_BUTTON_TYPE (EelLabeledImageToggleButton, + eel_labeled_image_toggle_button, + GtkToggleButton, + GTK_TYPE_TOGGLE_BUTTON, + GtkToggleButtonAccessible, + GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE) + +DEFINE_LABELLED_IMAGE_BUTTON_TYPE (EelLabeledImageRadioButton, + eel_labeled_image_radio_button, + GtkRadioButton, + GTK_TYPE_RADIO_BUTTON, + GtkRadioButtonAccessible, + GTK_TYPE_RADIO_BUTTON_ACCESSIBLE) |
