]> granicus.if.org Git - vim/commitdiff
patch 8.0.1099: warnings for GDK calls v8.0.1099
authorBram Moolenaar <Bram@vim.org>
Wed, 13 Sep 2017 20:09:58 +0000 (22:09 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 13 Sep 2017 20:09:58 +0000 (22:09 +0200)
Problem:    Warnings for GDK calls.
Solution:   Use other calls for GTK 3 and fix a few problems. (Kazunobu
            Kuriyama)

src/mbyte.c
src/version.c

index 4df23972824e819f1b5e040826facdb402bd08cc..29385a95719514c3ac0ec6e407af5e9cbf4ceedc 100644 (file)
@@ -4891,19 +4891,92 @@ im_preedit_window_set_position(void)
 im_preedit_window_open()
 {
     char *preedit_string;
+#if !GTK_CHECK_VERSION(3,16,0)
     char buf[8];
+#endif
     PangoAttrList *attr_list;
     PangoLayout *layout;
+#if GTK_CHECK_VERSION(3,0,0)
+# if !GTK_CHECK_VERSION(3,16,0)
+    GdkRGBA color;
+# endif
+#else
     GdkColor color;
+#endif
     gint w, h;
 
     if (preedit_window == NULL)
     {
        preedit_window = gtk_window_new(GTK_WINDOW_POPUP);
+       gtk_window_set_transient_for(GTK_WINDOW(preedit_window),
+                                                    GTK_WINDOW(gui.mainwin));
        preedit_label = gtk_label_new("");
+       gtk_widget_set_name(preedit_label, "vim-gui-preedit-area");
        gtk_container_add(GTK_CONTAINER(preedit_window), preedit_label);
     }
 
+#if GTK_CHECK_VERSION(3,16,0)
+    {
+       GtkStyleContext * const context
+                                 = gtk_widget_get_style_context(gui.drawarea);
+       GtkCssProvider * const provider = gtk_css_provider_new();
+       gchar              *css = NULL;
+       const char * const fontname
+                          = pango_font_description_get_family(gui.norm_font);
+       gint    fontsize
+               = pango_font_description_get_size(gui.norm_font) / PANGO_SCALE;
+       gchar   *fontsize_propval = NULL;
+
+       if (!pango_font_description_get_size_is_absolute(gui.norm_font))
+       {
+           /* fontsize was given in points.  Convert it into that in pixels
+            * to use with CSS. */
+           GdkScreen * const screen
+                 = gdk_window_get_screen(gtk_widget_get_window(gui.mainwin));
+           const gdouble dpi = gdk_screen_get_resolution(screen);
+           fontsize = dpi * fontsize / 72;
+       }
+       if (fontsize > 0)
+           fontsize_propval = g_strdup_printf("%dpx", fontsize);
+       else
+           fontsize_propval = g_strdup_printf("inherit");
+
+       css = g_strdup_printf(
+               "widget#vim-gui-preedit-area {\n"
+               "  font-family: %s,monospace;\n"
+               "  font-size: %s;\n"
+               "  color: #%.2lx%.2lx%.2lx;\n"
+               "  background-color: #%.2lx%.2lx%.2lx;\n"
+               "}\n",
+               fontname != NULL ? fontname : "inherit",
+               fontsize_propval,
+               (gui.norm_pixel >> 16) & 0xff,
+               (gui.norm_pixel >> 8) & 0xff,
+               gui.norm_pixel & 0xff,
+               (gui.back_pixel >> 16) & 0xff,
+               (gui.back_pixel >> 8) & 0xff,
+               gui.back_pixel & 0xff);
+
+       gtk_css_provider_load_from_data(provider, css, -1, NULL);
+       gtk_style_context_add_provider(context,
+                                    GTK_STYLE_PROVIDER(provider), G_MAXUINT);
+
+       g_free(css);
+       g_free(fontsize_propval);
+       g_object_unref(provider);
+    }
+#elif GTK_CHECK_VERSION(3,0,0)
+    gtk_widget_override_font(preedit_label, gui.norm_font);
+
+    vim_snprintf(buf, sizeof(buf), "#%06X", gui.norm_pixel);
+    gdk_rgba_parse(&color, buf);
+    gtk_widget_override_color(preedit_label, GTK_STATE_FLAG_NORMAL, &color);
+
+    vim_snprintf(buf, sizeof(buf), "#%06X", gui.back_pixel);
+    gdk_rgba_parse(&color, buf);
+    gtk_widget_override_background_color(preedit_label, GTK_STATE_FLAG_NORMAL,
+                                                                     &color);
+#else
     gtk_widget_modify_font(preedit_label, gui.norm_font);
 
     vim_snprintf(buf, sizeof(buf), "#%06X", gui.norm_pixel);
@@ -4913,6 +4986,7 @@ im_preedit_window_open()
     vim_snprintf(buf, sizeof(buf), "#%06X", gui.back_pixel);
     gdk_color_parse(buf, &color);
     gtk_widget_modify_bg(preedit_window, GTK_STATE_NORMAL, &color);
+#endif
 
     gtk_im_context_get_preedit_string(xic, &preedit_string, &attr_list, NULL);
 
index 346d201f8f7a720397f69050c01f810c8e9275c2..689a10ee56042ab1ba96d76d0dbb93b24271d2b4 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1099,
 /**/
     1098,
 /**/