From a751e602ad9a6fefdb4cf028f2a119ed707e9284 Mon Sep 17 00:00:00 2001 From: Edouard Dupin Date: Wed, 27 Jul 2011 18:20:13 +0200 Subject: [PATCH] context menu base --- Sources/CustumWidget/BufferView/BufferView.cpp | 18 ++++++++++++------ Sources/GuiTools/MenuContext/MenuContext.cpp | 14 ++++++++++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Sources/CustumWidget/BufferView/BufferView.cpp b/Sources/CustumWidget/BufferView/BufferView.cpp index 9794f53..881cad4 100644 --- a/Sources/CustumWidget/BufferView/BufferView.cpp +++ b/Sources/CustumWidget/BufferView/BufferView.cpp @@ -230,12 +230,13 @@ gint BufferView::CB_focusGet( GtkWidget *widget, GdkEventFocus *event, gpointer gint BufferView::CB_focusLost( GtkWidget *widget, GdkEventFocus *event, gpointer data) { - //BufferView * self = reinterpret_cast(data); + BufferView * self = reinterpret_cast(data); # ifdef USE_GTK_VERSION_2_0 GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); # endif EDN_INFO("Focus - out"); + self->m_menuContext->Hide(); return FALSE; } @@ -253,14 +254,15 @@ gint BufferView::CB_keyboardEvent( GtkWidget *widget, GdkEventKey *event, gpoint gint BufferView::CB_mouseButtonEvent(GtkWidget *widget, GdkEventButton *event, gpointer data) { BufferView * self = reinterpret_cast(data); - + if (event->type != GDK_BUTTON_RELEASE) { + self->m_menuContext->Hide(); + } // get focus on the widget gtk_widget_grab_focus(widget); if (event->button == 1) { - /* if (event->type == GDK_BUTTON_PRESS) { EDN_INFO("mouse-event BT1 ==> One Clicked"); - }else*/ if (event->type == GDK_2BUTTON_PRESS) { + }else if (event->type == GDK_2BUTTON_PRESS) { //EDN_INFO("mouse-event BT1 ==> Double Clicked %d, %d", (uint32_t)event->x, (uint32_t)event->y); uint32_t fontHeight = Display::GetFontHeight(); int32_t selectBuf = self->m_bufferManager->WitchBuffer((event->y / fontHeight) + 1); @@ -279,12 +281,14 @@ gint BufferView::CB_mouseButtonEvent(GtkWidget *widget, GdkEventButton *event, g }else if (event->type == GDK_BUTTON_RELEASE) { EDN_INFO("mouse-event BT1 ==> Realease"); }*/ - }/* else if (event->button == 2) { + } else if (event->button == 2) { + /* if (event->type == GDK_BUTTON_PRESS) { EDN_INFO("mouse-event BT2 PRESS"); self->m_menuContext->Show(event->x, event->y, false); } - }*/ else if (event->button == 3) { + */ + } else if (event->button == 3) { if (event->type == GDK_BUTTON_PRESS) { EDN_INFO("mouse-event BT3 PRESS"); uint32_t fontHeight = Display::GetFontHeight(); @@ -298,6 +302,8 @@ gint BufferView::CB_mouseButtonEvent(GtkWidget *widget, GdkEventButton *event, g gtk_widget_translate_coordinates(widget, gtk_widget_get_toplevel(widget), 0, 0, &widgetPosX, &widgetPosY); //EDN_INFO("widgetPosX=" << widgetPosX << " widgetPosY=" << widgetPosY); self->m_menuContext->Show(self->m_shawableAreaX+2+widgetPosX+windowsPosX, ((int32_t)(event->y / fontHeight)*fontHeight)+(fontHeight/2)+widgetPosY+windowsPosY, false); + } else { + self->m_menuContext->Hide(); } } } else { diff --git a/Sources/GuiTools/MenuContext/MenuContext.cpp b/Sources/GuiTools/MenuContext/MenuContext.cpp index 856d5a6..5848de9 100644 --- a/Sources/GuiTools/MenuContext/MenuContext.cpp +++ b/Sources/GuiTools/MenuContext/MenuContext.cpp @@ -235,14 +235,19 @@ void MenuContext::Show(int32_t x, int32_t y, bool top) gtk_container_add(GTK_CONTAINER(m_dialog), m_widget); // recursive version of gtk_widget_show - gtk_widget_show_all(m_dialog); - + gtk_widget_show_all(m_dialog); + + // Set the Focus + gtk_widget_grab_focus(m_widget); } void MenuContext::Hide(void) { - + if(NULL != m_dialog) { + gtk_widget_destroy(m_dialog); + m_dialog = NULL; + } } @@ -382,12 +387,13 @@ gint MenuContext::CB_focusGet( GtkWidget *widget, GdkEventFocus *event, gpointer gint MenuContext::CB_focusLost( GtkWidget *widget, GdkEventFocus *event, gpointer data) { - //MenuContext * self = reinterpret_cast(data); + MenuContext * self = reinterpret_cast(data); # ifdef USE_GTK_VERSION_2_0 GTK_WIDGET_UNSET_FLAGS(widget, GTK_HAS_FOCUS); # endif EDN_INFO("Focus - out"); + self->Hide(); return FALSE; }