summaryrefslogtreecommitdiff
path: root/mate-dictionary/libgdict/gdict-defbox.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-dictionary/libgdict/gdict-defbox.c')
-rw-r--r--mate-dictionary/libgdict/gdict-defbox.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/mate-dictionary/libgdict/gdict-defbox.c b/mate-dictionary/libgdict/gdict-defbox.c
index 9dfb1aa7..7ce0cb57 100644
--- a/mate-dictionary/libgdict/gdict-defbox.c
+++ b/mate-dictionary/libgdict/gdict-defbox.c
@@ -63,8 +63,10 @@ typedef struct
gint begin;
} Definition;
+#if !GTK_CHECK_VERSION(3,0,0)
#define GDICT_DEFBOX_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), GDICT_TYPE_DEFBOX, GdictDefboxPrivate))
+#endif
struct _GdictDefboxPrivate
{
@@ -129,11 +131,15 @@ enum
};
static guint gdict_defbox_signals[LAST_SIGNAL] = { 0 };
+#if GTK_CHECK_VERSION(3,0,0)
+G_DEFINE_TYPE_WITH_PRIVATE (GdictDefbox, gdict_defbox, GTK_TYPE_BOX)
+#else
static GdkColor default_link_color = { 0, 0, 0, 0xeeee };
static GdkColor default_visited_link_color = { 0, 0x5555, 0x1a1a, 0x8b8b };
G_DEFINE_TYPE (GdictDefbox, gdict_defbox, GTK_TYPE_BOX);
+#endif
static Definition *
@@ -1381,7 +1387,9 @@ static void
gdict_defbox_init_tags (GdictDefbox *defbox)
{
GdictDefboxPrivate *priv = defbox->priv;
+#if !GTK_CHECK_VERSION(3,0,0)
GdkColor *link_color, *visited_link_color;
+#endif
g_assert (GTK_IS_TEXT_BUFFER (priv->buffer));
@@ -1402,6 +1410,40 @@ gdict_defbox_init_tags (GdictDefbox *defbox)
"scale", PANGO_SCALE_SMALL,
NULL);
+#if GTK_CHECK_VERSION(3,0,0)
+ {
+ GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (defbox));
+ gboolean prefer_dark = FALSE;
+ GdkRGBA rgba;
+
+ /* HACK: we're hardcoding the Adwaita values because GtkTextTag
+ * cannot be styled via CSS
+ */
+ g_object_get (settings, "gtk-application-prefer-dark-theme", &prefer_dark, NULL);
+
+ if (!prefer_dark)
+ gdk_rgba_parse (&rgba, "#2a76c6");
+ else
+ gdk_rgba_parse (&rgba, "#4a90d9");
+
+ priv->link_tag =
+ gtk_text_buffer_create_tag (priv->buffer, "link",
+ "underline", PANGO_UNDERLINE_SINGLE,
+ "foreground-rgba", &rgba,
+ NULL);
+
+ if (!prefer_dark)
+ gdk_rgba_parse (&rgba, "#215d9c");
+ else
+ gdk_rgba_parse (&rgba, "#2a76c6");
+
+ priv->visited_link_tag =
+ gtk_text_buffer_create_tag (priv->buffer, "visited-link",
+ "underline", PANGO_UNDERLINE_SINGLE,
+ "foreground-rgba", &rgba,
+ NULL);
+ }
+#else
link_color = visited_link_color = NULL;
gtk_widget_style_get (GTK_WIDGET (defbox),
"link-color", &link_color,
@@ -1429,6 +1471,7 @@ gdict_defbox_init_tags (GdictDefbox *defbox)
if (visited_link_color != &default_visited_link_color)
gdk_color_free (visited_link_color);
+#endif
gtk_text_buffer_create_tag (priv->buffer, "phonetic",
"foreground", "dark gray",
@@ -1551,10 +1594,24 @@ set_cursor_if_appropriate (GdictDefbox *defbox,
priv = defbox->priv;
if (!priv->hand_cursor)
+#if GTK_CHECK_VERSION(3,0,0)
+ {
+ GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (defbox));
+ priv->hand_cursor = gdk_cursor_new_for_display (display, GDK_HAND2);
+ }
+#else
priv->hand_cursor = gdk_cursor_new (GDK_HAND2);
+#endif
if (!priv->regular_cursor)
+#if GTK_CHECK_VERSION(3,0,0)
+ {
+ GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (defbox));
+ priv->regular_cursor = gdk_cursor_new_for_display (display, GDK_XTERM);
+ }
+#else
priv->regular_cursor = gdk_cursor_new (GDK_XTERM);
+#endif
gtk_text_view_get_iter_at_location (text_view, &iter, x, y);
@@ -1665,13 +1722,17 @@ gdict_defbox_constructor (GType type,
defbox = GDICT_DEFBOX (object);
priv = defbox->priv;
+#if !GTK_CHECK_VERSION(3,0,0)
gtk_widget_push_composite_child ();
+#endif
sw = gtk_scrolled_window_new (NULL, NULL);
#if GTK_CHECK_VERSION (3, 0, 0)
gtk_widget_set_vexpand (sw, TRUE);
#endif
+#if !GTK_CHECK_VERSION(3,0,0)
gtk_widget_set_composite_name (sw, "gdict-defbox-scrolled-window");
+#endif
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
@@ -1684,14 +1745,18 @@ gdict_defbox_constructor (GType type,
gdict_defbox_init_tags (defbox);
priv->text_view = gtk_text_view_new_with_buffer (priv->buffer);
+#if !GTK_CHECK_VERSION(3,0,0)
gtk_widget_set_composite_name (priv->text_view, "gdict-defbox-text-view");
+#endif
gtk_text_view_set_editable (GTK_TEXT_VIEW (priv->text_view), FALSE);
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (priv->text_view), 4);
gtk_container_add (GTK_CONTAINER (sw), priv->text_view);
gtk_widget_show (priv->text_view);
priv->find_pane = create_find_pane (defbox);
+#if !GTK_CHECK_VERSION(3,0,0)
gtk_widget_set_composite_name (priv->find_pane, "gdict-defbox-find-pane");
+#endif
gtk_box_pack_end (GTK_BOX (defbox), priv->find_pane, FALSE, FALSE, 0);
/* stuff to make the link machinery work */
@@ -1705,11 +1770,14 @@ gdict_defbox_constructor (GType type,
G_CALLBACK (defbox_visibility_notify_cb),
defbox);
+#if !GTK_CHECK_VERSION(3,0,0)
gtk_widget_pop_composite_child ();
+#endif
return object;
}
+#if !GTK_CHECK_VERSION(3,0,0)
static void
gdict_defbox_style_set (GtkWidget *widget,
GtkStyle *old_style)
@@ -1745,6 +1813,7 @@ gdict_defbox_style_set (GtkWidget *widget,
if (visited_link_color != &default_visited_link_color)
gdk_color_free (visited_link_color);
}
+#endif
/* we override the GtkWidget::show_all method since we have widgets
* we don't want to show, such as the find pane
@@ -1815,7 +1884,9 @@ gdict_defbox_class_init (GdictDefboxClass *klass)
gobject_class->finalize = gdict_defbox_finalize;
widget_class->show_all = gdict_defbox_show_all;
+#if !GTK_CHECK_VERSION(3,0,0)
widget_class->style_set = gdict_defbox_style_set;
+#endif
/**
* GdictDefbox:word:
@@ -1941,7 +2012,9 @@ gdict_defbox_class_init (GdictDefboxClass *klass)
"hide-find",
0);
+#if !GTK_CHECK_VERSION(3,0,0)
g_type_class_add_private (klass, sizeof (GdictDefboxPrivate));
+#endif
}
static void
@@ -1952,7 +2025,11 @@ gdict_defbox_init (GdictDefbox *defbox)
gtk_orientable_set_orientation (GTK_ORIENTABLE (defbox), GTK_ORIENTATION_VERTICAL);
gtk_box_set_spacing (GTK_BOX (defbox), 6);
+#if GTK_CHECK_VERSION(3,0,0)
+ priv = gdict_defbox_get_instance_private (defbox);
+#else
priv = GDICT_DEFBOX_GET_PRIVATE (defbox);
+#endif
defbox->priv = priv;
priv->context = NULL;
@@ -2185,7 +2262,14 @@ lookup_start_cb (GdictContext *context,
priv->is_searching = TRUE;
if (!priv->busy_cursor)
+#if GTK_CHECK_VERSION(3,0,0)
+ {
+ GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (defbox));
+ priv->busy_cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
+ }
+#else
priv->busy_cursor = gdk_cursor_new (GDK_WATCH);
+#endif
window = gtk_text_view_get_window (GTK_TEXT_VIEW (priv->text_view),
GTK_TEXT_WINDOW_WIDGET);