]> Pileus Git - ~andy/gtk/blobdiff - gdk/x11/gdkevents-x11.c
Broken pipe
[~andy/gtk] / gdk / x11 / gdkevents-x11.c
index 74e99913562710c124f9f9b62ded517b9de7cf06..61ecdeb716bcaa0d8a324298065356dccb307577 100644 (file)
@@ -222,7 +222,7 @@ _gdk_events_init (GdkDisplay *display)
   display_sources = g_list_prepend (display_sources,display_source);
 
   gdk_display_add_client_message_filter (display,
-                                        gdk_atom_intern ("WM_PROTOCOLS", FALSE), 
+                                        gdk_atom_intern_static_string ("WM_PROTOCOLS"), 
                                         gdk_wm_protocols_filter,   
                                         NULL);
 }
@@ -409,7 +409,7 @@ do_net_wm_state_changes (GdkWindow *window)
     }
   else
     {
-      if (toplevel->have_sticky && toplevel->on_all_desktops)
+      if (toplevel->have_sticky || toplevel->on_all_desktops)
         gdk_synthesize_window_state (window,
                                      0,
                                      GDK_WINDOW_STATE_STICKY);
@@ -459,33 +459,29 @@ gdk_check_wm_desktop_changed (GdkWindow *window)
   gint format;
   gulong nitems;
   gulong bytes_after;
+  guchar *data;
+  gulong *desktop;
 
-  if (toplevel->have_sticky)
+  type = None;
+  gdk_error_trap_push ();
+  XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), 
+                      GDK_WINDOW_XID (window),
+                      gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"),
+                      0, G_MAXLONG, False, XA_CARDINAL, &type, 
+                      &format, &nitems,
+                      &bytes_after, &data);
+  gdk_error_trap_pop ();
+
+  if (type != None)
     {
-      guchar *data;
-      gulong *desktop;
-      
-      type = None;
-      gdk_error_trap_push ();
-      XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), 
-                         GDK_WINDOW_XID (window),
-                          gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"),
-                         0, G_MAXLONG, False, XA_CARDINAL, &type, 
-                         &format, &nitems,
-                          &bytes_after, &data);
-      gdk_error_trap_pop ();
-
-      if (type != None)
-        {
-         desktop = (gulong *)data;
-          toplevel->on_all_desktops = (*desktop == 0xFFFFFFFF);
-          XFree (desktop);
-        }
-      else
-       toplevel->on_all_desktops = FALSE;
-      
-      do_net_wm_state_changes (window);
+      desktop = (gulong *)data;
+      toplevel->on_all_desktops = (*desktop == 0xFFFFFFFF);
+      XFree (desktop);
     }
+  else
+    toplevel->on_all_desktops = FALSE;
+      
+  do_net_wm_state_changes (window);
 }
 
 static void
@@ -614,6 +610,9 @@ translate_key_event (GdkDisplay *display,
                                       &event->key.keyval,
                                       NULL, NULL, NULL);
 
+  _gdk_keymap_add_virtual_modifiers (keymap, &event->key.state);
+  event->key.is_modifier = _gdk_keymap_key_is_modifier (keymap, event->key.hardware_keycode);
+
   /* Fill in event->string crudely, since various programs
    * depend on it.
    */
@@ -2559,13 +2558,18 @@ fetch_net_wm_check_window (GdkScreen *screen)
   if (screen_x11->wmspec_check_window != None)
     return; /* already have it */
   
+  data = NULL;
   XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), screen_x11->xroot_window,
                      gdk_x11_get_xatom_by_name_for_display (display, "_NET_SUPPORTING_WM_CHECK"),
                      0, G_MAXLONG, False, XA_WINDOW, &type, &format, 
                      &n_items, &bytes_after, &data);
   
   if (type != XA_WINDOW)
-    return;
+    {
+      if (data)
+        XFree (data);
+      return;
+    }
 
   xwindow = (Window *)data;
 
@@ -2578,14 +2582,14 @@ fetch_net_wm_check_window (GdkScreen *screen)
   if (gdk_error_trap_pop () == Success)
     {
       screen_x11->wmspec_check_window = *xwindow;
-      XFree (xwindow);
-      
       screen_x11->need_refetch_net_supported = TRUE;
       screen_x11->need_refetch_wm_name = TRUE;
       
       /* Careful, reentrancy */
       _gdk_x11_screen_window_manager_changed (GDK_SCREEN (screen_x11));
     }
+
+  XFree (xwindow);    
 }
 
 /**
@@ -2895,7 +2899,7 @@ gdk_screen_get_setting (GdkScreen   *screen,
 
   const char *xsettings_name = NULL;
   XSettingsResult result;
-  XSettingsSetting *setting;
+  XSettingsSetting *setting = NULL;
   GdkScreenX11 *screen_x11;
   gboolean success = FALSE;
   gint i;
@@ -2913,12 +2917,12 @@ gdk_screen_get_setting (GdkScreen   *screen,
       }
 
   if (!xsettings_name)
-    return FALSE;
+    goto out;
 
   result = xsettings_client_get_setting (screen_x11->xsettings_client, 
                                         xsettings_name, &setting);
   if (result != XSETTINGS_SUCCESS)
-    return FALSE;
+    goto out;
 
   switch (setting->type)
     {
@@ -2965,9 +2969,14 @@ gdk_screen_get_setting (GdkScreen   *screen,
   
   g_value_unset (&tmp_val);
 
-  xsettings_setting_free (setting);
+ out:
+  if (setting)
+    xsettings_setting_free (setting);
 
-  return success;
+  if (success)
+    return TRUE;
+  else
+    return _gdk_x11_get_xft_setting (screen, name, value);
 }
 
 static GdkFilterReturn