generate EVT_CONTEXT_MENU under GTK
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17720 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1708,7 +1708,9 @@ static gint gtk_window_button_press_callback( GtkWidget *widget,
|
|||||||
// "button_release_event"
|
// "button_release_event"
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindowGTK *win )
|
static gint gtk_window_button_release_callback( GtkWidget *widget,
|
||||||
|
GdkEventButton *gdk_event,
|
||||||
|
wxWindowGTK *win )
|
||||||
{
|
{
|
||||||
DEBUG_MAIN_THREAD
|
DEBUG_MAIN_THREAD
|
||||||
|
|
||||||
@@ -1721,21 +1723,25 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
|
|||||||
|
|
||||||
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
||||||
|
|
||||||
/*
|
|
||||||
printf( "OnButtonRelease from " );
|
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
|
||||||
printf( win->GetClassInfo()->GetClassName() );
|
|
||||||
printf( ".\n" );
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxEventType event_type = wxEVT_NULL;
|
wxEventType event_type = wxEVT_NULL;
|
||||||
|
|
||||||
switch (gdk_event->button)
|
switch (gdk_event->button)
|
||||||
{
|
{
|
||||||
case 1: event_type = wxEVT_LEFT_UP; break;
|
case 1:
|
||||||
case 2: event_type = wxEVT_MIDDLE_UP; break;
|
event_type = wxEVT_LEFT_UP;
|
||||||
case 3: event_type = wxEVT_RIGHT_UP; break;
|
break;
|
||||||
default: return FALSE;
|
|
||||||
|
case 2:
|
||||||
|
event_type = wxEVT_MIDDLE_UP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
event_type = wxEVT_RIGHT_UP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// unknwon button, don't process
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMouseEvent event( event_type );
|
wxMouseEvent event( event_type );
|
||||||
@@ -1746,6 +1752,20 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
|
|||||||
// same wxListBox hack as above
|
// same wxListBox hack as above
|
||||||
win->FixUpMouseEvent(widget, event.m_x, event.m_y);
|
win->FixUpMouseEvent(widget, event.m_x, event.m_y);
|
||||||
|
|
||||||
|
if ( event_type == wxEVT_RIGHT_UP )
|
||||||
|
{
|
||||||
|
// generate a "context menu" event: this is similar to wxEVT_RIGHT_UP
|
||||||
|
// except that:
|
||||||
|
//
|
||||||
|
// (a) it's a command event and so is propagated to the parent
|
||||||
|
// (b) under MSW it can be generated from kbd too
|
||||||
|
// (c) it uses screen coords (because of (a))
|
||||||
|
wxContextMenuEvent evtCtx(wxEVT_CONTEXT_MENU,
|
||||||
|
win->GetId(),
|
||||||
|
win->ClientToScreen(event.GetPosition()));
|
||||||
|
(void)win->GetEventHandler()->ProcessEvent(evtCtx);
|
||||||
|
}
|
||||||
|
|
||||||
if ( !g_captureWindow )
|
if ( !g_captureWindow )
|
||||||
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
|
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
|
||||||
|
|
||||||
|
@@ -1708,7 +1708,9 @@ static gint gtk_window_button_press_callback( GtkWidget *widget,
|
|||||||
// "button_release_event"
|
// "button_release_event"
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindowGTK *win )
|
static gint gtk_window_button_release_callback( GtkWidget *widget,
|
||||||
|
GdkEventButton *gdk_event,
|
||||||
|
wxWindowGTK *win )
|
||||||
{
|
{
|
||||||
DEBUG_MAIN_THREAD
|
DEBUG_MAIN_THREAD
|
||||||
|
|
||||||
@@ -1721,21 +1723,25 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
|
|||||||
|
|
||||||
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
||||||
|
|
||||||
/*
|
|
||||||
printf( "OnButtonRelease from " );
|
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
|
||||||
printf( win->GetClassInfo()->GetClassName() );
|
|
||||||
printf( ".\n" );
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxEventType event_type = wxEVT_NULL;
|
wxEventType event_type = wxEVT_NULL;
|
||||||
|
|
||||||
switch (gdk_event->button)
|
switch (gdk_event->button)
|
||||||
{
|
{
|
||||||
case 1: event_type = wxEVT_LEFT_UP; break;
|
case 1:
|
||||||
case 2: event_type = wxEVT_MIDDLE_UP; break;
|
event_type = wxEVT_LEFT_UP;
|
||||||
case 3: event_type = wxEVT_RIGHT_UP; break;
|
break;
|
||||||
default: return FALSE;
|
|
||||||
|
case 2:
|
||||||
|
event_type = wxEVT_MIDDLE_UP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
event_type = wxEVT_RIGHT_UP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// unknwon button, don't process
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMouseEvent event( event_type );
|
wxMouseEvent event( event_type );
|
||||||
@@ -1746,6 +1752,20 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
|
|||||||
// same wxListBox hack as above
|
// same wxListBox hack as above
|
||||||
win->FixUpMouseEvent(widget, event.m_x, event.m_y);
|
win->FixUpMouseEvent(widget, event.m_x, event.m_y);
|
||||||
|
|
||||||
|
if ( event_type == wxEVT_RIGHT_UP )
|
||||||
|
{
|
||||||
|
// generate a "context menu" event: this is similar to wxEVT_RIGHT_UP
|
||||||
|
// except that:
|
||||||
|
//
|
||||||
|
// (a) it's a command event and so is propagated to the parent
|
||||||
|
// (b) under MSW it can be generated from kbd too
|
||||||
|
// (c) it uses screen coords (because of (a))
|
||||||
|
wxContextMenuEvent evtCtx(wxEVT_CONTEXT_MENU,
|
||||||
|
win->GetId(),
|
||||||
|
win->ClientToScreen(event.GetPosition()));
|
||||||
|
(void)win->GetEventHandler()->ProcessEvent(evtCtx);
|
||||||
|
}
|
||||||
|
|
||||||
if ( !g_captureWindow )
|
if ( !g_captureWindow )
|
||||||
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
|
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user