]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsx11.cpp
Implemented HasContainerColumns() for GTK+
[wxWidgets.git] / src / unix / utilsx11.cpp
index e1cf437119b0bf21bd3753732ef1b3991eec425a..51736ee3321875bdb4e781030304e5bdc85835ed 100644 (file)
@@ -41,7 +41,6 @@
 #endif
 
 // Various X11 Atoms used in this file:
-static Atom _NET_WM_ICON = 0;
 static Atom _NET_WM_STATE = 0;
 static Atom _NET_WM_STATE_FULLSCREEN = 0;
 static Atom _NET_WM_STATE_STAYS_ON_TOP = 0;
@@ -106,31 +105,35 @@ private:
 // Setting icons for window manager:
 // ----------------------------------------------------------------------------
 
-void wxSetIconsX11( WXDisplay* display, WXWindow window,
-                    const wxIconBundle& ib )
+#if wxUSE_IMAGE && !wxUSE_NANOX
+
+static Atom _NET_WM_ICON = 0;
+
+void
+wxSetIconsX11(WXDisplay* display, WXWindow window, const wxIconBundle& ib)
 {
-#if !wxUSE_NANOX
     size_t size = 0;
-    size_t i, max = ib.m_icons.GetCount();
 
-    for( i = 0; i < max; ++i )
-        if( ib.m_icons[i].Ok() )
-            size += 2 + ib.m_icons[i].GetWidth() * ib.m_icons[i].GetHeight();
+    const size_t numIcons = ib.GetIconCount();
+    for ( size_t i = 0; i < numIcons; ++i )
+    {
+        const wxIcon icon = ib.GetIconByIndex(i);
+
+        size += 2 + icon.GetWidth() * icon.GetHeight();
+    }
 
     wxMAKE_ATOM(_NET_WM_ICON, (Display*)display);
 
-    if( size > 0 )
+    if ( size > 0 )
     {
-//       The code below is correct for 64-bit machines also.
-//       wxUint32* data = new wxUint32[size];
-//       wxUint32* ptr = data;
         unsigned long* data = new unsigned long[size];
         unsigned long* ptr = data;
 
-        for( i = 0; i < max; ++i )
+        for ( size_t i = 0; i < numIcons; ++i )
         {
-            const wxImage image = ib.m_icons[i].ConvertToImage();
-            int width = image.GetWidth(), height = image.GetHeight();
+            const wxImage image = ib.GetIconByIndex(i).ConvertToImage();
+            int width = image.GetWidth(),
+                height = image.GetHeight();
             unsigned char* imageData = image.GetData();
             unsigned char* imageDataEnd = imageData + ( width * height * 3 );
             bool hasMask = image.HasMask();
@@ -153,7 +156,8 @@ void wxSetIconsX11( WXDisplay* display, WXWindow window,
             *ptr++ = width;
             *ptr++ = height;
 
-            while( imageData < imageDataEnd ) {
+            while ( imageData < imageDataEnd )
+            {
                 r = imageData[0];
                 g = imageData[1];
                 b = imageData[2];
@@ -182,9 +186,9 @@ void wxSetIconsX11( WXDisplay* display, WXWindow window,
                          WindowCast(window),
                          _NET_WM_ICON );
     }
-#endif // !wxUSE_NANOX
 }
 
+#endif // wxUSE_IMAGE && !wxUSE_NANOX
 
 // ----------------------------------------------------------------------------
 // Fullscreen mode:
@@ -804,48 +808,44 @@ bool wxGetKeyState(wxKeyCode key)
     wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key !=
         WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons"));
 
-#if defined(__WXX11__)
-    Display *pDisplay = (Display*) wxApp::GetDisplay();
-#elif defined(__WXGTK__)
-    Display *pDisplay = GDK_DISPLAY();
-#elif defined(__WXMOTIF__)
-    Display *pDisplay = (Display*) (wxTheApp ? wxTheApp->GetInitialDisplay() : NULL);
-#else
-#error  Add code to get the DISPLAY for this platform
-#endif
+    Display *pDisplay = (Display*) wxGetDisplay();
 
     int iKey = wxCharCodeWXToX(key);
     int          iKeyMask = 0;
     Window       wDummy1, wDummy2;
     int          iDummy3, iDummy4, iDummy5, iDummy6;
     unsigned int iMask;
-    XModifierKeymap* map = XGetModifierMapping(pDisplay);
     KeyCode keyCode = XKeysymToKeycode(pDisplay,iKey);
     if (keyCode == NoSymbol)
         return false;
 
     if ( IsModifierKey(iKey) )  // If iKey is a modifier key, use a different method
-        {  for (int i = 0; i < 8; ++i)
     {
-        if ( map->modifiermap[map->max_keypermod * i] == keyCode)
+        XModifierKeymap *map = XGetModifierMapping(pDisplay);
+        wxCHECK_MSG( map, false, _T("failed to get X11 modifiers map") );
+
+        for (int i = 0; i < 8; ++i)
         {
-            iKeyMask = 1 << i;
+            if ( map->modifiermap[map->max_keypermod * i] == keyCode)
+            {
+                iKeyMask = 1 << i;
+            }
         }
+
+        XQueryPointer(pDisplay, DefaultRootWindow(pDisplay), &wDummy1, &wDummy2,
+                        &iDummy3, &iDummy4, &iDummy5, &iDummy6, &iMask );
+        XFreeModifiermap(map);
+        return (iMask & iKeyMask) != 0;
     }
 
-    XQueryPointer(pDisplay, DefaultRootWindow(pDisplay), &wDummy1, &wDummy2,
-                  &iDummy3, &iDummy4, &iDummy5, &iDummy6, &iMask );
-    XFreeModifiermap(map);
-    return (iMask & iKeyMask) != 0;
-        }
     // From the XLib manual:
-    // The XQueryKeymap() function returns a bit vector for the logical state of the keyboard, 
-    // where each bit set to 1 indicates that the corresponding key is currently pressed down. 
-    // The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 
+    // The XQueryKeymap() function returns a bit vector for the logical state of the keyboard,
+    // where each bit set to 1 indicates that the corresponding key is currently pressed down.
+    // The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7
     // with the least-significant bit in the byte representing key 8N.
     char key_vector[32];
     XQueryKeymap(pDisplay, key_vector);
-    return key_vector[keyCode >> 3] & (1 << (keyCode & 7)); 
+    return key_vector[keyCode >> 3] & (1 << (keyCode & 7));
 }
 
 #endif // __WXX11__ || __WXGTK__ || __WXMOTIF__