]> git.saurik.com Git - wxWidgets.git/commitdiff
Added Pop-up menus.
authorRobert Roebling <robert@roebling.de>
Sun, 9 Aug 1998 13:06:25 +0000 (13:06 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 9 Aug 1998 13:06:25 +0000 (13:06 +0000)
  Hunted down bug in dnd
  Changed widget, that wxWin connects to in certain
  case (in controls, where m_widget is not the connect
  widget, such as list control and text control)
  Compile fixes all over

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@486 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

25 files changed:
include/wx/generic/listctrl.h
include/wx/gtk/listbox.h
include/wx/gtk/textctrl.h
include/wx/gtk/window.h
include/wx/gtk1/listbox.h
include/wx/gtk1/textctrl.h
include/wx/gtk1/window.h
samples/controls/controls.cpp
samples/dnd/dnd.cpp
src/gtk/dnd.cpp
src/gtk/frame.cpp
src/gtk/listbox.cpp
src/gtk/mdi.cpp
src/gtk/menu.cpp
src/gtk/notebook.cpp
src/gtk/textctrl.cpp
src/gtk/window.cpp
src/gtk1/dnd.cpp
src/gtk1/frame.cpp
src/gtk1/listbox.cpp
src/gtk1/mdi.cpp
src/gtk1/menu.cpp
src/gtk1/notebook.cpp
src/gtk1/textctrl.cpp
src/gtk1/window.cpp

index 02d797f8bb8460c8a4cb8b159ee0deb6461aeb3b..227bc96d834a454f11a6104b26aafbfec96fec0b 100644 (file)
@@ -540,7 +540,9 @@ class wxListMainWindow: public wxScrolledWindow
     long FindItem(long start, long data);
     long HitTest( int x, int y, int &flags );
     void InsertItem( wxListItem &item );
+//    void AddItem( wxListItem &item );
     void InsertColumn( long col, wxListItem &item );
+//    void AddColumn( wxListItem &item );
     void SortItems( wxListCtrlCompare fn, long data );
     virtual bool OnListNotify( wxListEvent &event );
 
index 88dafbcc4583effe61e9da6e1a3541cc63340a61..43012923c16ecd057dc2c4ef8b5dda404c5fc7b7 100644 (file)
@@ -74,7 +74,7 @@ class wxListBox: public wxControl
     void SetString( int n, const wxString &string );
     void SetStringSelection( const wxString &string, bool select = TRUE );
 
-    virtual GtkWidget *GetDropTargetWidget(void);
+    virtual GtkWidget *GetConnectWidget(void);
   
   private:
   
index 797c61bc7f0d79740f01110272dc575a4e058534..2c8d9febeba61126f4838ef068585f49c052a3eb 100644 (file)
@@ -99,7 +99,7 @@ public:
     wxTextCtrl& operator<<(double d);
     wxTextCtrl& operator<<(const char c);
 
-    virtual GtkWidget* GetDropTargetWidget(void);
+    virtual GtkWidget* GetConnectWidget(void);
     
 private:
   bool  m_modified;
index 91a20f949603933f4af1296cf1ca9d021a3912e3..15f75c70ba29248cdcac7e9b0a9c4a029845efe9 100644 (file)
@@ -164,11 +164,14 @@ public:
   virtual bool TransferDataFromWindow();
   void OnInitDialog( wxInitDialogEvent &event );
   virtual void InitDialog();
+  
+  virtual bool PopupMenu( wxMenu *menu, int x, int y );
 
   virtual void SetDropTarget( wxDropTarget *dropTarget );
   virtual wxDropTarget *GetDropTarget() const;
+  
 private:
-  virtual GtkWidget* GetDropTargetWidget(void);
+  virtual GtkWidget* GetConnectWidget(void);
   
 public:
   virtual void SetScrollbar( int orient, int pos, int thumbVisible,
index 88dafbcc4583effe61e9da6e1a3541cc63340a61..43012923c16ecd057dc2c4ef8b5dda404c5fc7b7 100644 (file)
@@ -74,7 +74,7 @@ class wxListBox: public wxControl
     void SetString( int n, const wxString &string );
     void SetStringSelection( const wxString &string, bool select = TRUE );
 
-    virtual GtkWidget *GetDropTargetWidget(void);
+    virtual GtkWidget *GetConnectWidget(void);
   
   private:
   
index 797c61bc7f0d79740f01110272dc575a4e058534..2c8d9febeba61126f4838ef068585f49c052a3eb 100644 (file)
@@ -99,7 +99,7 @@ public:
     wxTextCtrl& operator<<(double d);
     wxTextCtrl& operator<<(const char c);
 
-    virtual GtkWidget* GetDropTargetWidget(void);
+    virtual GtkWidget* GetConnectWidget(void);
     
 private:
   bool  m_modified;
index 91a20f949603933f4af1296cf1ca9d021a3912e3..15f75c70ba29248cdcac7e9b0a9c4a029845efe9 100644 (file)
@@ -164,11 +164,14 @@ public:
   virtual bool TransferDataFromWindow();
   void OnInitDialog( wxInitDialogEvent &event );
   virtual void InitDialog();
+  
+  virtual bool PopupMenu( wxMenu *menu, int x, int y );
 
   virtual void SetDropTarget( wxDropTarget *dropTarget );
   virtual wxDropTarget *GetDropTarget() const;
+  
 private:
-  virtual GtkWidget* GetDropTargetWidget(void);
+  virtual GtkWidget* GetConnectWidget(void);
   
 public:
   virtual void SetScrollbar( int orient, int pos, int thumbVisible,
index 663f1b4c9591a165d30548c71b6bde05ecc996b0..bd57a74f0af58b3a5bf6b5836928118ce5584617 100644 (file)
@@ -123,6 +123,20 @@ bool MyApp::OnInit(void)
   return TRUE;
 }
 
+//----------------------------------------------------------------------
+// MyTextCtrl
+//----------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
+  EVT_RIGHT_DOWN   (MyTextCtrl::OnRightButton)
+END_EVENT_TABLE()
+  
+MyTextCtrl::MyTextCtrl( wxWindow *parent, wxWindowID id, const wxString &value,
+      const wxPoint &pos, const wxSize &size, int style ) :
+  wxTextCtrl( parent, id, value, pos, size, style )
+{
+}
+
 //----------------------------------------------------------------------
 // MyPanel
 //----------------------------------------------------------------------
index 68e299b830e0ffc00b5c9775a7ec9584d1bfe0df..9df7943189d05ca9f1bd6d520b546ac4b747c879 100644 (file)
@@ -82,7 +82,8 @@ public:
   void OnHelp (wxCommandEvent& event);
   void OnLogClear(wxCommandEvent& event);
 
-  void OnMouseBtnDown(wxMouseEvent& event);
+  void OnLeftDown(wxMouseEvent& event);
+  void OnRightDown(wxMouseEvent& event);
 
   bool OnClose();
   
@@ -116,10 +117,8 @@ BEGIN_EVENT_TABLE(DnDFrame, wxFrame)
   EVT_MENU(Menu_Drag,  DnDFrame::OnDrag)
   EVT_MENU(Menu_Help,  DnDFrame::OnHelp)
   EVT_MENU(Menu_Clear, DnDFrame::OnLogClear)
-
-  EVT_LEFT_DOWN(OnMouseBtnDown)
-  EVT_RIGHT_DOWN(OnMouseBtnDown)
-  EVT_MIDDLE_DOWN(OnMouseBtnDown)
+  EVT_LEFT_DOWN(OnLeftDown)
+  EVT_RIGHT_DOWN(OnRightDown)
 END_EVENT_TABLE()
 
 // `Main program' equivalent, creating windows and returning main app frame
@@ -291,10 +290,11 @@ bool DnDFrame::OnClose()
   return TRUE; 
 }
 
-void DnDFrame::OnMouseBtnDown(wxMouseEvent& /* event */ )
+void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
 {
   if ( !m_strText.IsEmpty() ) {
     // start drag operation
+    
     wxTextDataObject data(m_strText);
     wxDropSource dragSource(data, this);
     const char *pc;
@@ -312,6 +312,17 @@ void DnDFrame::OnMouseBtnDown(wxMouseEvent& /* event */ )
   }
 }
 
+void DnDFrame::OnRightDown(wxMouseEvent &event )
+{
+  wxMenu *menu = new wxMenu;
+  
+  menu->Append(Menu_Drag, "&Test drag...");
+  menu->Append(Menu_About, "&About");
+  menu->Append(Menu_Quit, "E&xit");
+  
+  PopupMenu( menu, event.GetX(), event.GetY() );
+}
+
 DnDFrame::~DnDFrame()
 {
   if ( m_pLog != NULL ) {
index ce49947151a69444abbfdd9eaf2064091e5e64c9..2498e7c4238a2fb65e229ba8884d4d524d17c16b 100644 (file)
@@ -263,6 +263,8 @@ wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
   
   UnregisterWindow();
   
+  g_blockEventsOnDrag = FALSE;
+  
   return m_retValue;
 };
 
index beb8a3df5c76620d21ec933e8c6a813d7eec2858..033ec23f9d37896b4064fd8dfdd7a11fd2c37c3e 100644 (file)
@@ -400,16 +400,16 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar )
   
   if (m_frameMenuBar)
   {
+    wxNode *node = m_frameMenuBar->m_menus.First();
+    while (node)
+    {
+      wxMenu *menu = (wxMenu*)node->Data();
+      SetInvokingWindow( menu, this );
+      node = node->Next();
+    };
+    
     if (m_frameMenuBar->m_parent != this)
     {
-      wxNode *node = m_frameMenuBar->m_menus.First();
-      while (node)
-      {
-        wxMenu *menu = (wxMenu*)node->Data();
-        SetInvokingWindow( menu, this );
-        node = node->Next();
-      };
-  
       m_frameMenuBar->m_parent = this;
       gtk_myfixed_put( GTK_MYFIXED(m_mainWindow),
         m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
index dad6cd6915e9fb4d919267f9ec1dd0f2007ba7d4..c8a8bea0d769cd17a23d7b5940b1edcddb0c9e46 100644 (file)
@@ -167,7 +167,7 @@ void wxListBox::Delete( int n )
   wxNode *node = m_clientData.Nth( n );
   if (!node)
   {
-    wxFAIL_MSG(_("wxListBox::Delete wrong index"));
+    wxFAIL_MSG("wxListBox::Delete wrong index");
   }
   else
     m_clientData.DeleteNode( node );
@@ -347,7 +347,7 @@ int wxListBox::GetIndex( GtkWidget *item ) const
   return -1;
 };
 
-GtkWidget *wxListBox::GetDropTargetWidget(void)
+GtkWidget *wxListBox::GetConnectWidget(void)
 {
   return GTK_WIDGET(m_list);
 };
index 25dc7ba34b9ff5eea459078607a027545c5a60ec..4f71cc31cf6191695b039a2eadb153b0a5f3c91e 100644 (file)
@@ -324,7 +324,7 @@ void wxMDIClientWindow::AddChild( wxWindow *child )
 {
   if (!child->IsKindOf(CLASSINFO(wxMDIChildFrame)))
   {
-     wxFAIL_MSG(_("wxNotebook::AddChild: Child has to be wxMDIChildFrame"));
+     wxFAIL_MSG("wxNotebook::AddChild: Child has to be wxMDIChildFrame");
      return;
   };
 
index 0e99bfef147ffa6538a6f35415116e774aa4ffea..93bc49891bd0fb0c2430bd1c92e1d12193332d25 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "wx/menu.h"
 #include "wx/log.h"
+#include "wx/intl.h"
 
 //-----------------------------------------------------------------------------
 // wxMenuBar
@@ -183,6 +184,7 @@ wxMenuItem::wxMenuItem()
 
 void wxMenuItem::SetText(const wxString& str)
 {
+  m_text = "";
   for ( const char *pc = str; *pc != '\0'; pc++ ) {
     if ( *pc == '&' )
       pc++; // skip it
@@ -193,7 +195,7 @@ void wxMenuItem::SetText(const wxString& str)
 
 void wxMenuItem::Check( bool check )
 {
-  wxCHECK_RET( IsCheckable(), _("can't check uncheckable item!") )
+  wxCHECK_RET( IsCheckable(), _("Can't check uncheckable item!") )
 
   m_isChecked = check;
   gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
index da307dfb3ebbcf547ad2eaf616c848148e081d57..a2c5f2f9df4071d6862661544ebded6111ba1b12 100644 (file)
@@ -16,6 +16,7 @@
 #include "wx/panel.h"
 #include "wx/utils.h"
 #include "wx/imaglist.h"
+#include "wx/intl.h"
 #include "wx/log.h"
 
 //-----------------------------------------------------------------------------
index a4e3470b534100848f9d4160c84d21227ff20b8c..5f73627ccff8663ecd3dc0576f5291629b3faeb8 100644 (file)
@@ -387,7 +387,7 @@ wxTextCtrl& wxTextCtrl::operator<<(const char c)
   return *this;
 }
 
-GtkWidget* wxTextCtrl::GetDropTargetWidget(void)
+GtkWidget* wxTextCtrl::GetConnectWidget(void)
 {
   return GTK_WIDGET(m_text);
 };
index 097bd145e8b384b29c653da5f66ab14a2b88ee30..382d1e089b86e8bc05879fcdb96c97cb59e522af 100644 (file)
@@ -25,6 +25,7 @@
 #include "wx/dcclient.h"
 #include "wx/dnd.h"
 #include "wx/mdi.h"
+#include "wx/menu.h"
 #include "wx/notebook.h"
 #include "wx/statusbr.h"
 #include <wx/intl.h>
@@ -55,13 +56,13 @@ void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gd
   if (g_blockEventsOnDrag) return;
   
 /*
- if (IS_KIND_OF(win,wxTreeCtrl))
+ if (IS_KIND_OF(win,wxStatusBar))
  {
     printf( "OnExpose from " );
   if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
     printf( win->GetClassInfo()->GetClassName() );
   printf( ".\n" );
-  
+
   printf( "x: %d \n", gdk_event->area.x );
   printf( "y: %d \n", gdk_event->area.y );
   printf( "w: %d \n", gdk_event->area.width );
@@ -92,6 +93,8 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect,
   if (g_blockEventsOnDrag) return;
   
 /*
+ if (IS_KIND_OF(win,wxStatusBar))
+ {
   printf( "OnDraw from " );
   if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
     printf( win->GetClassInfo()->GetClassName() );
@@ -101,6 +104,7 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect,
   printf( "y: %d \n", rect->y );
   printf( "w: %d \n", rect->width );
   printf( "h: %d \n", rect->height );
+}
 */
 
   win->m_updateRegion.Union( rect->x, rect->y, rect->width, rect->height );
@@ -297,7 +301,7 @@ gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_ev
     printf( win->GetClassInfo()->GetClassName() );
   printf( ".\n" );
 */
-  
+
   wxEventType event_type = wxEVT_LEFT_DOWN;
   
   if (gdk_event->button == 1)
@@ -945,8 +949,7 @@ void wxWindow::PostCreation(void)
 //  GtkStyle *style = m_widget->style;
 //  style->font = m_font.GetInternalFont( 1.0 );          // destroy old font ?
   
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
  
   gtk_object_set_data (GTK_OBJECT (connect_widget), "MyWxWindow", (gpointer)this );
   
@@ -1418,8 +1421,7 @@ void wxWindow::MakeModal( bool modal )
 
 void wxWindow::SetFocus(void)
 {
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
   if (connect_widget)
   {
     if (GTK_WIDGET_CAN_FOCUS(connect_widget) && !GTK_WIDGET_HAS_FOCUS (connect_widget) )
@@ -1587,7 +1589,7 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
         rect->width, 
         rect->height );
     else
-      Clear();
+      Clear(); 
   };
   if (!rect)
   {
@@ -1713,9 +1715,29 @@ void wxWindow::InitDialog(void)
   GetEventHandler()->ProcessEvent(event);
 };
 
+static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
+{
+  menu->SetInvokingWindow( win );
+  wxNode *node = menu->m_items.First();
+  while (node)
+  {
+    wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+    if (menuitem->IsSubMenu())
+      SetInvokingWindow( menuitem->GetSubMenu(), win );
+    node = node->Next();
+  };
+};
+
+bool wxWindow::PopupMenu( wxMenu *menu, int WXUNUSED(x), int WXUNUSED(y) )
+{
+  SetInvokingWindow( menu, this );
+  gtk_menu_popup( GTK_MENU(menu->m_menu), NULL, NULL, NULL, NULL, 0, 0 );
+  return TRUE;
+}
+
 void wxWindow::SetDropTarget( wxDropTarget *dropTarget )
 {
-  GtkWidget *dnd_widget = GetDropTargetWidget();
+  GtkWidget *dnd_widget = GetConnectWidget();
   
   if (m_pDropTarget)
   {
@@ -1740,7 +1762,7 @@ wxDropTarget *wxWindow::GetDropTarget() const
   return m_pDropTarget;
 };
 
-GtkWidget* wxWindow::GetDropTargetWidget(void)
+GtkWidget* wxWindow::GetConnectWidget(void)
 {
   GtkWidget *connect_widget = m_widget;
   if (m_wxwindow) connect_widget = m_wxwindow;
@@ -1779,8 +1801,7 @@ long wxWindow::GetWindowStyleFlag(void) const
 
 void wxWindow::CaptureMouse(void)
 {
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
   gtk_grab_add( connect_widget );
   gdk_pointer_grab ( connect_widget->window, FALSE,
                     (GdkEventMask)
@@ -1792,8 +1813,7 @@ void wxWindow::CaptureMouse(void)
 
 void wxWindow::ReleaseMouse(void)
 {
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
   gtk_grab_remove( connect_widget );
   gdk_pointer_ungrab ( GDK_CURRENT_TIME );
 };
index ce49947151a69444abbfdd9eaf2064091e5e64c9..2498e7c4238a2fb65e229ba8884d4d524d17c16b 100644 (file)
@@ -263,6 +263,8 @@ wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
   
   UnregisterWindow();
   
+  g_blockEventsOnDrag = FALSE;
+  
   return m_retValue;
 };
 
index beb8a3df5c76620d21ec933e8c6a813d7eec2858..033ec23f9d37896b4064fd8dfdd7a11fd2c37c3e 100644 (file)
@@ -400,16 +400,16 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar )
   
   if (m_frameMenuBar)
   {
+    wxNode *node = m_frameMenuBar->m_menus.First();
+    while (node)
+    {
+      wxMenu *menu = (wxMenu*)node->Data();
+      SetInvokingWindow( menu, this );
+      node = node->Next();
+    };
+    
     if (m_frameMenuBar->m_parent != this)
     {
-      wxNode *node = m_frameMenuBar->m_menus.First();
-      while (node)
-      {
-        wxMenu *menu = (wxMenu*)node->Data();
-        SetInvokingWindow( menu, this );
-        node = node->Next();
-      };
-  
       m_frameMenuBar->m_parent = this;
       gtk_myfixed_put( GTK_MYFIXED(m_mainWindow),
         m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
index dad6cd6915e9fb4d919267f9ec1dd0f2007ba7d4..c8a8bea0d769cd17a23d7b5940b1edcddb0c9e46 100644 (file)
@@ -167,7 +167,7 @@ void wxListBox::Delete( int n )
   wxNode *node = m_clientData.Nth( n );
   if (!node)
   {
-    wxFAIL_MSG(_("wxListBox::Delete wrong index"));
+    wxFAIL_MSG("wxListBox::Delete wrong index");
   }
   else
     m_clientData.DeleteNode( node );
@@ -347,7 +347,7 @@ int wxListBox::GetIndex( GtkWidget *item ) const
   return -1;
 };
 
-GtkWidget *wxListBox::GetDropTargetWidget(void)
+GtkWidget *wxListBox::GetConnectWidget(void)
 {
   return GTK_WIDGET(m_list);
 };
index 25dc7ba34b9ff5eea459078607a027545c5a60ec..4f71cc31cf6191695b039a2eadb153b0a5f3c91e 100644 (file)
@@ -324,7 +324,7 @@ void wxMDIClientWindow::AddChild( wxWindow *child )
 {
   if (!child->IsKindOf(CLASSINFO(wxMDIChildFrame)))
   {
-     wxFAIL_MSG(_("wxNotebook::AddChild: Child has to be wxMDIChildFrame"));
+     wxFAIL_MSG("wxNotebook::AddChild: Child has to be wxMDIChildFrame");
      return;
   };
 
index 0e99bfef147ffa6538a6f35415116e774aa4ffea..93bc49891bd0fb0c2430bd1c92e1d12193332d25 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "wx/menu.h"
 #include "wx/log.h"
+#include "wx/intl.h"
 
 //-----------------------------------------------------------------------------
 // wxMenuBar
@@ -183,6 +184,7 @@ wxMenuItem::wxMenuItem()
 
 void wxMenuItem::SetText(const wxString& str)
 {
+  m_text = "";
   for ( const char *pc = str; *pc != '\0'; pc++ ) {
     if ( *pc == '&' )
       pc++; // skip it
@@ -193,7 +195,7 @@ void wxMenuItem::SetText(const wxString& str)
 
 void wxMenuItem::Check( bool check )
 {
-  wxCHECK_RET( IsCheckable(), _("can't check uncheckable item!") )
+  wxCHECK_RET( IsCheckable(), _("Can't check uncheckable item!") )
 
   m_isChecked = check;
   gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
index da307dfb3ebbcf547ad2eaf616c848148e081d57..a2c5f2f9df4071d6862661544ebded6111ba1b12 100644 (file)
@@ -16,6 +16,7 @@
 #include "wx/panel.h"
 #include "wx/utils.h"
 #include "wx/imaglist.h"
+#include "wx/intl.h"
 #include "wx/log.h"
 
 //-----------------------------------------------------------------------------
index a4e3470b534100848f9d4160c84d21227ff20b8c..5f73627ccff8663ecd3dc0576f5291629b3faeb8 100644 (file)
@@ -387,7 +387,7 @@ wxTextCtrl& wxTextCtrl::operator<<(const char c)
   return *this;
 }
 
-GtkWidget* wxTextCtrl::GetDropTargetWidget(void)
+GtkWidget* wxTextCtrl::GetConnectWidget(void)
 {
   return GTK_WIDGET(m_text);
 };
index 097bd145e8b384b29c653da5f66ab14a2b88ee30..382d1e089b86e8bc05879fcdb96c97cb59e522af 100644 (file)
@@ -25,6 +25,7 @@
 #include "wx/dcclient.h"
 #include "wx/dnd.h"
 #include "wx/mdi.h"
+#include "wx/menu.h"
 #include "wx/notebook.h"
 #include "wx/statusbr.h"
 #include <wx/intl.h>
@@ -55,13 +56,13 @@ void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gd
   if (g_blockEventsOnDrag) return;
   
 /*
- if (IS_KIND_OF(win,wxTreeCtrl))
+ if (IS_KIND_OF(win,wxStatusBar))
  {
     printf( "OnExpose from " );
   if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
     printf( win->GetClassInfo()->GetClassName() );
   printf( ".\n" );
-  
+
   printf( "x: %d \n", gdk_event->area.x );
   printf( "y: %d \n", gdk_event->area.y );
   printf( "w: %d \n", gdk_event->area.width );
@@ -92,6 +93,8 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect,
   if (g_blockEventsOnDrag) return;
   
 /*
+ if (IS_KIND_OF(win,wxStatusBar))
+ {
   printf( "OnDraw from " );
   if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
     printf( win->GetClassInfo()->GetClassName() );
@@ -101,6 +104,7 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect,
   printf( "y: %d \n", rect->y );
   printf( "w: %d \n", rect->width );
   printf( "h: %d \n", rect->height );
+}
 */
 
   win->m_updateRegion.Union( rect->x, rect->y, rect->width, rect->height );
@@ -297,7 +301,7 @@ gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_ev
     printf( win->GetClassInfo()->GetClassName() );
   printf( ".\n" );
 */
-  
+
   wxEventType event_type = wxEVT_LEFT_DOWN;
   
   if (gdk_event->button == 1)
@@ -945,8 +949,7 @@ void wxWindow::PostCreation(void)
 //  GtkStyle *style = m_widget->style;
 //  style->font = m_font.GetInternalFont( 1.0 );          // destroy old font ?
   
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
  
   gtk_object_set_data (GTK_OBJECT (connect_widget), "MyWxWindow", (gpointer)this );
   
@@ -1418,8 +1421,7 @@ void wxWindow::MakeModal( bool modal )
 
 void wxWindow::SetFocus(void)
 {
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
   if (connect_widget)
   {
     if (GTK_WIDGET_CAN_FOCUS(connect_widget) && !GTK_WIDGET_HAS_FOCUS (connect_widget) )
@@ -1587,7 +1589,7 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
         rect->width, 
         rect->height );
     else
-      Clear();
+      Clear(); 
   };
   if (!rect)
   {
@@ -1713,9 +1715,29 @@ void wxWindow::InitDialog(void)
   GetEventHandler()->ProcessEvent(event);
 };
 
+static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
+{
+  menu->SetInvokingWindow( win );
+  wxNode *node = menu->m_items.First();
+  while (node)
+  {
+    wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+    if (menuitem->IsSubMenu())
+      SetInvokingWindow( menuitem->GetSubMenu(), win );
+    node = node->Next();
+  };
+};
+
+bool wxWindow::PopupMenu( wxMenu *menu, int WXUNUSED(x), int WXUNUSED(y) )
+{
+  SetInvokingWindow( menu, this );
+  gtk_menu_popup( GTK_MENU(menu->m_menu), NULL, NULL, NULL, NULL, 0, 0 );
+  return TRUE;
+}
+
 void wxWindow::SetDropTarget( wxDropTarget *dropTarget )
 {
-  GtkWidget *dnd_widget = GetDropTargetWidget();
+  GtkWidget *dnd_widget = GetConnectWidget();
   
   if (m_pDropTarget)
   {
@@ -1740,7 +1762,7 @@ wxDropTarget *wxWindow::GetDropTarget() const
   return m_pDropTarget;
 };
 
-GtkWidget* wxWindow::GetDropTargetWidget(void)
+GtkWidget* wxWindow::GetConnectWidget(void)
 {
   GtkWidget *connect_widget = m_widget;
   if (m_wxwindow) connect_widget = m_wxwindow;
@@ -1779,8 +1801,7 @@ long wxWindow::GetWindowStyleFlag(void) const
 
 void wxWindow::CaptureMouse(void)
 {
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
   gtk_grab_add( connect_widget );
   gdk_pointer_grab ( connect_widget->window, FALSE,
                     (GdkEventMask)
@@ -1792,8 +1813,7 @@ void wxWindow::CaptureMouse(void)
 
 void wxWindow::ReleaseMouse(void)
 {
-  GtkWidget *connect_widget = m_widget;
-  if (m_wxwindow) connect_widget = m_wxwindow;
+  GtkWidget *connect_widget = GetConnectWidget();
   gtk_grab_remove( connect_widget );
   gdk_pointer_ungrab ( GDK_CURRENT_TIME );
 };