]> www.fi.muni.cz Git - evince.git/blobdiff - libview/ev-annotation-window.c
[dualscreen] fix crash on ctrl+w and fix control window closing
[evince.git] / libview / ev-annotation-window.c
index 61002e2e61a85803fd6623b480c74bf0376a73b2..8776dd4cf4cfd520a110690d14fbffb199a25fc3 100644 (file)
@@ -134,28 +134,31 @@ static void
 ev_annotation_window_set_color (EvAnnotationWindow *window,
                                GdkColor           *color)
 {
-       GtkRcStyle *rc_style;
-       GdkColor    gcolor;
-
-       gcolor = *color;
-
-       /* Apply colors to style */
-       rc_style = gtk_widget_get_modifier_style (GTK_WIDGET (window));
-       rc_style->base[GTK_STATE_NORMAL] = gcolor;
-       rc_style->bg[GTK_STATE_PRELIGHT] = gcolor;
-       rc_style->bg[GTK_STATE_NORMAL] = gcolor;
-       rc_style->bg[GTK_STATE_ACTIVE] = gcolor;
-       rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_BG;
-       rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_BG | GTK_RC_BASE;
-       rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_BG;
-
-       /* Apply the style to the widgets */
-       g_object_ref (rc_style);
-       gtk_widget_modify_style (GTK_WIDGET (window), rc_style);
-       gtk_widget_modify_style (window->close_button, rc_style);
-       gtk_widget_modify_style (window->resize_se, rc_style);
-       gtk_widget_modify_style (window->resize_sw, rc_style);
-       g_object_unref (rc_style);
+        GtkStyleProperties *properties;
+        GtkStyleProvider   *provider;
+       GdkRGBA             rgba;
+
+        rgba.red = color->red / 65535.;
+        rgba.green = color->green / 65535.;
+        rgba.blue = color->blue / 65535.;
+        rgba.alpha = 1;
+
+        properties = gtk_style_properties_new ();
+        gtk_style_properties_set (properties, 0,
+                                  "color", &rgba,
+                                  "background-color", &rgba,
+                                  NULL);
+
+        provider = GTK_STYLE_PROVIDER (properties);
+        gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (window)),
+                                        provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+        gtk_style_context_add_provider (gtk_widget_get_style_context (window->close_button),
+                                        provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+        gtk_style_context_add_provider (gtk_widget_get_style_context (window->resize_se),
+                                        provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+        gtk_style_context_add_provider (gtk_widget_get_style_context (window->resize_sw),
+                                        provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+        g_object_unref (properties);
 }
 
 static void
@@ -250,7 +253,7 @@ ev_annotation_window_set_resize_cursor (GtkWidget          *widget,
                                                     GDK_BOTTOM_LEFT_CORNER :
                                                     GDK_BOTTOM_RIGHT_CORNER);
                gdk_window_set_cursor (gdk_window, cursor);
-               gdk_cursor_unref (cursor);
+               g_object_unref (cursor);
        } else {
                gdk_window_set_cursor (gdk_window, NULL);
        }
@@ -375,7 +378,7 @@ ev_annotation_window_init (EvAnnotationWindow *window)
 
        gtk_container_set_border_width (GTK_CONTAINER (window), 2);
 
-       gtk_window_set_accept_focus (GTK_WINDOW (window), TRUE);
+       gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE);
        gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
        gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
        gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE);
@@ -508,6 +511,24 @@ ev_annotation_window_focus_out_event (GtkWidget     *widget,
        return FALSE;
 }
 
+static gboolean
+ev_annotation_window_enter_notify_event (GtkWidget        *widget,
+                                         GdkEventCrossing *event)
+{
+        gtk_window_set_accept_focus (GTK_WINDOW (widget), TRUE);
+
+        return FALSE;
+}
+
+static gboolean
+ev_annotation_window_leave_notify_event (GtkWidget        *widget,
+                                         GdkEventCrossing *event)
+{
+        gtk_window_set_accept_focus (GTK_WINDOW (widget), FALSE);
+
+        return FALSE;
+}
+
 static void
 ev_annotation_window_class_init (EvAnnotationWindowClass *klass)
 {
@@ -522,6 +543,8 @@ ev_annotation_window_class_init (EvAnnotationWindowClass *klass)
        gtk_widget_class->configure_event = ev_annotation_window_configure_event;
        gtk_widget_class->focus_in_event = ev_annotation_window_focus_in_event;
        gtk_widget_class->focus_out_event = ev_annotation_window_focus_out_event;
+        gtk_widget_class->enter_notify_event = ev_annotation_window_enter_notify_event;
+        gtk_widget_class->leave_notify_event = ev_annotation_window_leave_notify_event;
 
        g_object_class_install_property (g_object_class,
                                         PROP_ANNOTATION,