don't use global variables if GTK provides mechanism to pass arguments to callback function
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27511 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
365a001408
commit
39b44a399f
@ -4262,32 +4262,25 @@ static void SetInvokingWindow( wxMenu *menu, wxWindowGTK *win )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used to pass the coordinates from wxWindowGTK::DoPopupMenu() to
|
|
||||||
// wxPopupMenuPositionCallback()
|
|
||||||
//
|
|
||||||
// should be safe even in the MT case as the user can hardly popup 2 menus
|
|
||||||
// simultaneously, can he?
|
|
||||||
static gint gs_pop_x = 0;
|
|
||||||
static gint gs_pop_y = 0;
|
|
||||||
|
|
||||||
extern "C" void wxPopupMenuPositionCallback( GtkMenu *menu,
|
extern "C" void wxPopupMenuPositionCallback( GtkMenu *menu,
|
||||||
gint *x, gint *y,
|
gint *x, gint *y,
|
||||||
#ifdef __WXGTK20__
|
#ifdef __WXGTK20__
|
||||||
gboolean * WXUNUSED(whatever),
|
gboolean * WXUNUSED(whatever),
|
||||||
#endif
|
#endif
|
||||||
gpointer WXUNUSED(user_data) )
|
gpointer user_data )
|
||||||
{
|
{
|
||||||
// ensure that the menu appears entirely on screen
|
// ensure that the menu appears entirely on screen
|
||||||
GtkRequisition req;
|
GtkRequisition req;
|
||||||
gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req);
|
gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req);
|
||||||
|
|
||||||
wxSize sizeScreen = wxGetDisplaySize();
|
wxSize sizeScreen = wxGetDisplaySize();
|
||||||
|
wxPoint *pos = (wxPoint*)user_data;
|
||||||
|
|
||||||
gint xmax = sizeScreen.x - req.width,
|
gint xmax = sizeScreen.x - req.width,
|
||||||
ymax = sizeScreen.y - req.height;
|
ymax = sizeScreen.y - req.height;
|
||||||
|
|
||||||
*x = gs_pop_x < xmax ? gs_pop_x : xmax;
|
*x = pos->x < xmax ? pos->x : xmax;
|
||||||
*y = gs_pop_y < ymax ? gs_pop_y : ymax;
|
*y = pos->y < ymax ? pos->y : ymax;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
||||||
@ -4300,9 +4293,7 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
|||||||
|
|
||||||
menu->UpdateUI();
|
menu->UpdateUI();
|
||||||
|
|
||||||
gs_pop_x = x;
|
wxPoint pos(ClientToScreen(wxPoint(x, y)));
|
||||||
gs_pop_y = y;
|
|
||||||
ClientToScreen( &gs_pop_x, &gs_pop_y );
|
|
||||||
|
|
||||||
bool is_waiting = TRUE;
|
bool is_waiting = TRUE;
|
||||||
|
|
||||||
@ -4316,8 +4307,8 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
|||||||
(GtkWidget *) NULL, // parent menu shell
|
(GtkWidget *) NULL, // parent menu shell
|
||||||
(GtkWidget *) NULL, // parent menu item
|
(GtkWidget *) NULL, // parent menu item
|
||||||
wxPopupMenuPositionCallback, // function to position it
|
wxPopupMenuPositionCallback, // function to position it
|
||||||
NULL, // client data
|
&pos, // client data
|
||||||
0, // button used to activate it
|
0 /* FIXME! */, // button used to activate it
|
||||||
#ifdef __WXGTK20__
|
#ifdef __WXGTK20__
|
||||||
gtk_get_current_event_time()
|
gtk_get_current_event_time()
|
||||||
#else
|
#else
|
||||||
|
@ -4262,32 +4262,25 @@ static void SetInvokingWindow( wxMenu *menu, wxWindowGTK *win )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used to pass the coordinates from wxWindowGTK::DoPopupMenu() to
|
|
||||||
// wxPopupMenuPositionCallback()
|
|
||||||
//
|
|
||||||
// should be safe even in the MT case as the user can hardly popup 2 menus
|
|
||||||
// simultaneously, can he?
|
|
||||||
static gint gs_pop_x = 0;
|
|
||||||
static gint gs_pop_y = 0;
|
|
||||||
|
|
||||||
extern "C" void wxPopupMenuPositionCallback( GtkMenu *menu,
|
extern "C" void wxPopupMenuPositionCallback( GtkMenu *menu,
|
||||||
gint *x, gint *y,
|
gint *x, gint *y,
|
||||||
#ifdef __WXGTK20__
|
#ifdef __WXGTK20__
|
||||||
gboolean * WXUNUSED(whatever),
|
gboolean * WXUNUSED(whatever),
|
||||||
#endif
|
#endif
|
||||||
gpointer WXUNUSED(user_data) )
|
gpointer user_data )
|
||||||
{
|
{
|
||||||
// ensure that the menu appears entirely on screen
|
// ensure that the menu appears entirely on screen
|
||||||
GtkRequisition req;
|
GtkRequisition req;
|
||||||
gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req);
|
gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req);
|
||||||
|
|
||||||
wxSize sizeScreen = wxGetDisplaySize();
|
wxSize sizeScreen = wxGetDisplaySize();
|
||||||
|
wxPoint *pos = (wxPoint*)user_data;
|
||||||
|
|
||||||
gint xmax = sizeScreen.x - req.width,
|
gint xmax = sizeScreen.x - req.width,
|
||||||
ymax = sizeScreen.y - req.height;
|
ymax = sizeScreen.y - req.height;
|
||||||
|
|
||||||
*x = gs_pop_x < xmax ? gs_pop_x : xmax;
|
*x = pos->x < xmax ? pos->x : xmax;
|
||||||
*y = gs_pop_y < ymax ? gs_pop_y : ymax;
|
*y = pos->y < ymax ? pos->y : ymax;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
||||||
@ -4300,9 +4293,7 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
|||||||
|
|
||||||
menu->UpdateUI();
|
menu->UpdateUI();
|
||||||
|
|
||||||
gs_pop_x = x;
|
wxPoint pos(ClientToScreen(wxPoint(x, y)));
|
||||||
gs_pop_y = y;
|
|
||||||
ClientToScreen( &gs_pop_x, &gs_pop_y );
|
|
||||||
|
|
||||||
bool is_waiting = TRUE;
|
bool is_waiting = TRUE;
|
||||||
|
|
||||||
@ -4316,8 +4307,8 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
|
|||||||
(GtkWidget *) NULL, // parent menu shell
|
(GtkWidget *) NULL, // parent menu shell
|
||||||
(GtkWidget *) NULL, // parent menu item
|
(GtkWidget *) NULL, // parent menu item
|
||||||
wxPopupMenuPositionCallback, // function to position it
|
wxPopupMenuPositionCallback, // function to position it
|
||||||
NULL, // client data
|
&pos, // client data
|
||||||
0, // button used to activate it
|
0 /* FIXME! */, // button used to activate it
|
||||||
#ifdef __WXGTK20__
|
#ifdef __WXGTK20__
|
||||||
gtk_get_current_event_time()
|
gtk_get_current_event_time()
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user