]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/window.cpp
always call GTKSetActivatesDefault(), not only if wxTE_PROCESS_ENTER style was given...
[wxWidgets.git] / src / gtk / window.cpp
index 21eaaf3f96ac9780aa38fce7678479c63b59fda3..e7ef905f4e9805d03a33c000c396176da2c1a521 100644 (file)
@@ -330,46 +330,14 @@ void wxgtk_window_size_request_callback(GtkWidget * WXUNUSED(widget),
 // "expose_event" of m_wxwindow
 //-----------------------------------------------------------------------------
 
-
-extern GtkWidget *GetEntryWidget();
-
 extern "C" {
 static gboolean
-gtk_window_expose_callback( GtkWidget *widget,
+gtk_window_expose_callback( GtkWidget*,
                             GdkEventExpose *gdk_event,
                             wxWindow *win )
 {
     DEBUG_MAIN_THREAD
 
-    wxPizza *pizza = WX_PIZZA(widget);
-    GdkWindow *backing_window = pizza->m_backing_window;
-
-    int w = widget->allocation.width;
-    int h = widget->allocation.height;
-    
-    // if this event is for the border-only GdkWindow
-    if (backing_window && gdk_event->window == pizza->m_backing_window)
-    {
-        if (win->HasFlag(wxBORDER_SIMPLE))
-        {
-            GdkGC* gc = gdk_gc_new(gdk_event->window);
-            gdk_gc_set_foreground(gc, &widget->style->black);
-            gdk_draw_rectangle(gdk_event->window, gc, false, 0, 0, w - 1, h - 1);
-            g_object_unref(gc);
-        }
-        else
-        {
-            GtkShadowType shadow = GTK_SHADOW_IN;
-            if (win->HasFlag(wxBORDER_RAISED))
-                shadow = GTK_SHADOW_OUT;
-            gtk_paint_shadow(
-                GetEntryWidget()->style, gdk_event->window, GTK_STATE_NORMAL,
-                shadow, NULL, GetEntryWidget(), "entry", 0, 0, w, h);
-        }
-   
-        return TRUE;
-    }
-
 #if 0
     if (win->GetName())
     {
@@ -409,6 +377,9 @@ gtk_window_expose_callback( GtkWidget *widget,
 //-----------------------------------------------------------------------------
 
 #ifndef __WXUNIVERSAL__
+
+GtkWidget* GetEntryWidget();
+
 extern "C" {
 static gboolean
 expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
@@ -429,8 +400,7 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
     int h = win->m_wxwindow->allocation.height;
     if (win->HasFlag(wxBORDER_SIMPLE))
     {
-        GdkGC* gc;
-        gc = gdk_gc_new(gdk_event->window);
+        GdkGC* gc = gdk_gc_new(gdk_event->window);
         gdk_gc_set_foreground(gc, &widget->style->black);
         gdk_draw_rectangle(gdk_event->window, gc, false, x, y, w - 1, h - 1);
         g_object_unref(gc);
@@ -440,9 +410,20 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
         GtkShadowType shadow = GTK_SHADOW_IN;
         if (win->HasFlag(wxBORDER_RAISED))
             shadow = GTK_SHADOW_OUT;
+
+        // Style detail to use
+        const char* detail;
+        if (widget == win->m_wxwindow)
+            // for non-scrollable wxWindows
+            detail = "entry";
+        else
+            // for scrollable ones
+            detail = "viewport";
+
+        GtkWidget* styleWidget = GetEntryWidget();
         gtk_paint_shadow(
-           GetEntryWidget()->style, gdk_event->window, GTK_STATE_NORMAL,
-           shadow, NULL, GetEntryWidget(), "viewport", x, y, w, h);
+           styleWidget->style, gdk_event->window, GTK_STATE_NORMAL,
+           shadow, NULL, styleWidget, detail, x, y, w, h);
     }
 
     // no further painting is needed for border-only GdkWindow
@@ -2053,11 +2034,8 @@ void gtk_window_style_set_callback( GtkWidget *WXUNUSED(widget),
                                GtkStyle *previous_style,
                                wxWindow* win )
 {
-    //wxLogDebug(wxT("gtk_window_style_set_callback"));
     if (win && previous_style)
     {
-        wxString name(win->GetName());
-        //wxLogDebug(wxT("gtk_window_style_set_callback %s"), name.c_str());
         wxSysColourChangedEvent event;
         event.SetEventObject(win);
 
@@ -2067,40 +2045,28 @@ void gtk_window_style_set_callback( GtkWidget *WXUNUSED(widget),
 
 } // extern "C"
 
-// Connect/disconnect style-set
-
-void wxConnectStyleSet(wxWindow* win)
-{
-    if (win->m_wxwindow)
-        g_signal_connect (win->m_wxwindow, "style_set",
-                              G_CALLBACK (gtk_window_style_set_callback), win);
-}
-
-void wxDisconnectStyleSet(wxWindow* win)
-{
-  if (win->m_wxwindow)
-      g_signal_handlers_disconnect_by_func (win->m_wxwindow,
-                                          (gpointer) gtk_window_style_set_callback,
-                                              win);
-}
-
 // Helper to suspend colour change event event processing while we change a widget's style
 class wxSuspendStyleEvents
 {
 public:
-  wxSuspendStyleEvents(wxWindow* win)
-  {
-    m_win = win;
-    if (win->IsTopLevel())
-      wxDisconnectStyleSet(win);
-  }
-  ~wxSuspendStyleEvents()
-  {
-    if (m_win->IsTopLevel())
-      wxConnectStyleSet(m_win);
-  }
+    wxSuspendStyleEvents(wxWindow* win)
+    {
+        m_win = NULL;
+        if (win->m_wxwindow && win->IsTopLevel())
+        {
+            m_win = win;
+            g_signal_handlers_block_by_func(
+                m_win->m_wxwindow, (void*)gtk_window_style_set_callback, m_win);
+        }
+    }
+    ~wxSuspendStyleEvents()
+    {
+        if (m_win)
+            g_signal_handlers_unblock_by_func(
+                m_win->m_wxwindow, (void*)gtk_window_style_set_callback, m_win);
+    }
 
-  wxWindow* m_win;
+    wxWindow* m_win;
 };
 
 // ----------------------------------------------------------------------------
@@ -2260,6 +2226,11 @@ bool wxWindowGTK::Create( wxWindow *parent,
                           long style,
                           const wxString &name  )
 {
+    // Get default border
+    wxBorder border = GetBorder(style);
+    style &= ~wxBORDER_MASK;
+    style |= border;
+    
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
     {
@@ -2267,6 +2238,7 @@ bool wxWindowGTK::Create( wxWindow *parent,
         return false;
     }
 
+
     m_wxwindow = wxPizza::New(m_windowStyle);
     if (!HasFlag(wxHSCROLL) && !HasFlag(wxVSCROLL))
         m_widget = m_wxwindow;
@@ -2442,7 +2414,7 @@ void wxWindowGTK::PostCreation()
 
         // border drawing
 #ifndef __WXUNIVERSAL__
-        if (HasFlag(wxBORDER_SIMPLE | wxBORDER_RAISED | wxBORDER_SUNKEN))
+        if (HasFlag(wxPizza::BORDER_STYLES))
         {
             g_signal_connect(m_widget, "expose_event",
                 G_CALLBACK(expose_event_border), this);
@@ -3306,7 +3278,7 @@ wxWindowGTK::AdjustForLayoutDirection(wxCoord x,
     return x;
 }
 
-void wxWindowGTK::DoMoveInTabOrder(wxWindow *win, MoveKind move)
+void wxWindowGTK::DoMoveInTabOrder(wxWindow *win, WindowOrder move)
 {
     wxWindowBase::DoMoveInTabOrder(win, move);
     m_dirtyTabOrder = true;
@@ -3699,11 +3671,11 @@ void wxWindowGTK::GtkSendPaintEvents()
 
         GetEventHandler()->ProcessEvent(erase_event);
     }
-    
+
     wxNcPaintEvent nc_paint_event( GetId() );
     nc_paint_event.SetEventObject( this );
     GetEventHandler()->ProcessEvent( nc_paint_event );
+
     wxPaintEvent paint_event( GetId() );
     paint_event.SetEventObject( this );
     GetEventHandler()->ProcessEvent( paint_event );
@@ -4299,17 +4271,6 @@ wxPoint wxGetMousePosition()
 
 }
 
-// Needed for implementing e.g. combobox on wxGTK within a modal dialog.
-void wxAddGrab(wxWindow* window)
-{
-    gtk_grab_add( (GtkWidget*) window->GetHandle() );
-}
-
-void wxRemoveGrab(wxWindow* window)
-{
-    gtk_grab_remove( (GtkWidget*) window->GetHandle() );
-}
-
 GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const
 {
     GdkWindow* window = NULL;