]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
define _timezone for VisualAge
[wxWidgets.git] / src / gtk1 / window.cpp
index 67006b5d8bc206f29b242b751bc661568aeeef90..25f072ef1de057922df3f075ccb8ceb59da0545f 100644 (file)
@@ -223,18 +223,21 @@ static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget),
 
 void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window )
 {
-/*
-    wxString tmp = name;
-    tmp += wxT(" FROM ");
-    tmp += window;
+    // suppress warnings about gtk_debug_focus_in_callback being unused with
+    // this "if ( 0 )"
+    if ( 0 )
+    {
+        wxString tmp = name;
+        tmp += wxT(" FROM ");
+        tmp += window;
 
-    wxChar *s = new wxChar[tmp.Length()+1];
+        wxChar *s = new wxChar[tmp.Length()+1];
 
-    wxStrcpy( s, tmp );
+        wxStrcpy( s, tmp );
 
-    gtk_signal_connect( GTK_OBJECT(widget), "focus_in_event",
-      GTK_SIGNAL_FUNC(gtk_debug_focus_in_callback), (gpointer)s );
-*/
+        gtk_signal_connect( GTK_OBJECT(widget), "focus_in_event",
+          GTK_SIGNAL_FUNC(gtk_debug_focus_in_callback), (gpointer)s );
+    }
 }
 
 #endif // Debug
@@ -669,17 +672,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
     if (g_blockEventsOnDrag) return FALSE;
 
 /*
+    wxString tmp;
+    tmp += (char)gdk_event->keyval;
+    printf( "KeyDown-Code is: %s.\n", tmp.c_str() );
     printf( "KeyDown-ScanCode is: %d.\n", gdk_event->keyval );
-    if (gdk_event->state & GDK_SHIFT_MASK)
-      printf( "ShiftDown.\n" );
-    else
-      printf( "ShiftUp.\n" );
-    if (gdk_event->state & GDK_CONTROL_MASK)
-      printf( "ControlDown.\n" );
-    else
-      printf( "ControlUp.\n" );
-    printf( "\n" );
 */
+    
     int x = 0;
     int y = 0;
     GdkModifierType state;
@@ -1314,6 +1312,11 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(
         panel->SetLastFocus(win);
     }
 
+#ifdef HAVE_XIM
+    if (win->m_ic)
+        gdk_im_begin(win->m_ic, win->m_wxwindow->window);
+#endif
+
     wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() );
     event.SetEventObject( win );
 
@@ -1352,6 +1355,11 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED
     printf( ".\n" );
 */
 
+#ifdef HAVE_XIM
+    if (win->m_ic)
+        gdk_im_end();
+#endif
+
     wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
     event.SetEventObject( win );
 
@@ -1617,8 +1625,8 @@ wxWindow *wxWindowBase::FindFocus()
 // "realize" from m_widget
 //-----------------------------------------------------------------------------
 
-/* we cannot set colours and fonts before the widget has
-   been realized, so we do this directly after realization */
+/* We cannot set colours and fonts before the widget has
+   been realized, so we do this directly after realization. */
 
 static gint
 gtk_window_realized_callback( GtkWidget *WXUNUSED(m_widget), wxWindow *win )
@@ -1642,6 +1650,42 @@ gtk_window_realized_callback( GtkWidget *WXUNUSED(m_widget), wxWindow *win )
     return FALSE;
 }
 
+//-----------------------------------------------------------------------------
+// "size_allocate"
+//-----------------------------------------------------------------------------
+
+#ifdef HAVE_XIM
+    #define WXUNUSED_UNLESS_XIM(param)  param
+#else
+    #define WXUNUSED_UNLESS_XIM(param)  WXUNUSED(param)
+#endif
+
+/* Resize XIM window */
+
+static
+void gtk_wxwindow_size_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget),
+                                 GtkAllocation * WXUNUSED_UNLESS_XIM(alloc),
+                                 wxFrame * WXUNUSED_UNLESS_XIM(win) )
+{
+    if (g_isIdle)
+        wxapp_install_idle_handler();
+
+#ifdef HAVE_XIM
+    if (!win->m_ic)
+        return;
+
+    if  (gdk_ic_get_style (win->m_ic) & GDK_IM_PREEDIT_POSITION)
+    {
+        gint width, height;
+
+        gdk_window_get_size (widget->window, &width, &height);
+        win->m_icattr->preedit_area.width = width;
+        win->m_icattr->preedit_area.height = height;
+        gdk_ic_set_attr (win->m_ic, win->m_icattr, GDK_IC_PREEDIT_AREA);
+    }
+#endif // HAVE_XIM
+}
+
 //-----------------------------------------------------------------------------
 // "realize" from m_wxwindow
 //-----------------------------------------------------------------------------
@@ -1649,7 +1693,8 @@ gtk_window_realized_callback( GtkWidget *WXUNUSED(m_widget), wxWindow *win )
 /* Initialize XIM support */
 
 static gint
-gtk_wxwindow_realized_callback( GtkWidget *widget, wxWindow *win )
+gtk_wxwindow_realized_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget),
+                                wxWindow * WXUNUSED_UNLESS_XIM(win) )
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
@@ -1666,16 +1711,17 @@ gtk_wxwindow_realized_callback( GtkWidget *widget, wxWindow *win )
     GdkEventMask mask;
     GdkColormap *colormap;
     GdkICAttr *attr = win->m_icattr;
-    GdkICAttributesType attrmask = GDK_IC_ALL_REQ;
+    unsigned attrmask = GDK_IC_ALL_REQ;
     GdkIMStyle style;
-    GdkIMStyle supported_style = GDK_IM_PREEDIT_NONE |
+    GdkIMStyle supported_style = (GdkIMStyle)
+                                  (GDK_IM_PREEDIT_NONE |
                                   GDK_IM_PREEDIT_NOTHING |
                                   GDK_IM_PREEDIT_POSITION |
                                   GDK_IM_STATUS_NONE |
-                                  GDK_IM_STATUS_NOTHING;
+                                  GDK_IM_STATUS_NOTHING);
 
     if (widget->style && widget->style->font->type != GDK_FONT_FONTSET)
-       supported_style &= ~GDK_IM_PREEDIT_POSITION;
+       supported_style = (GdkIMStyle)(supported_style & ~GDK_IM_PREEDIT_POSITION);
 
     attr->style = style = gdk_im_decide_style (supported_style);
     attr->client_window = widget->window;
@@ -1713,16 +1759,16 @@ gtk_wxwindow_realized_callback( GtkWidget *widget, wxWindow *win )
          attr->preedit_fontset = widget->style->font;
 
          break;
-       }
-
-      win->m_ic = gdk_ic_new (attr, attrmask);
+    }
+       
+      win->m_ic = gdk_ic_new (attr, (GdkICAttributesType)attrmask);
      
       if (win->m_ic == NULL)
        g_warning ("Can't create input context.");
       else
        {
          mask = gdk_window_get_events (widget->window);
-         mask |= gdk_ic_get_events (win->m_ic);
+         mask = (GdkEventMask)(mask | gdk_ic_get_events (win->m_ic));
          gdk_window_set_events (widget->window, mask);
 
          if (GTK_WIDGET_HAS_FOCUS(widget))
@@ -2110,11 +2156,15 @@ void wxWindow::PostCreation()
     gtk_signal_connect( GTK_OBJECT(connect_widget), "realize",
                             GTK_SIGNAL_FUNC(gtk_window_realized_callback), (gpointer) this );
  
-    /* Initialize XIM support.  */
     if (m_wxwindow)
     {
+        /* Initialize XIM support.  */
         gtk_signal_connect( GTK_OBJECT(m_wxwindow), "realize",
                             GTK_SIGNAL_FUNC(gtk_wxwindow_realized_callback), (gpointer) this );
+                           
+        /* And resize XIM window.  */
+        gtk_signal_connect( GTK_OBJECT(m_wxwindow), "size_allocate",
+                            GTK_SIGNAL_FUNC(gtk_wxwindow_size_callback), (gpointer)this );
     }
     
     m_hasVMT = TRUE;