diff options
-rw-r--r-- | gtk/PlatGTK.cxx | 15 | ||||
-rw-r--r-- | include/Platform.h | 14 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 6 | ||||
-rw-r--r-- | src/ScintillaBase.h | 13 |
4 files changed, 41 insertions, 7 deletions
diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index 3e2d10f99..47e32118c 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -670,7 +670,8 @@ void Window::SetTitle(const char *s) { gtk_window_set_title(GTK_WINDOW(id), s); } -ListBox::ListBox() : list(0), current(0), desiredVisibleRows(5), maxItemCharacters(0) {} +ListBox::ListBox() : list(0), current(0), desiredVisibleRows(5), maxItemCharacters(0), + doubleClickAction(NULL), doubleClickActionData(NULL) {} ListBox::~ListBox() {} @@ -680,6 +681,16 @@ static void SelectionAC(GtkWidget *, gint row, gint, *pi = row; } +static gboolean ButtonPress(GtkWidget *, GdkEventButton* ev, gpointer p) { + ListBox* lb = reinterpret_cast<ListBox*>(p); + if (ev->type == GDK_2BUTTON_PRESS && lb->doubleClickAction != NULL) { + lb->doubleClickAction(lb->doubleClickActionData); + return TRUE; + } + + return FALSE; +} + void ListBox::Create(Window &, int) { id = gtk_window_new(GTK_WINDOW_POPUP); @@ -703,6 +714,8 @@ void ListBox::Create(Window &, int) { gtk_clist_set_selection_mode(GTK_CLIST(list), GTK_SELECTION_BROWSE); gtk_signal_connect(GTK_OBJECT(list), "select_row", GTK_SIGNAL_FUNC(SelectionAC), ¤t); + gtk_signal_connect(GTK_OBJECT(list), "button_press_event", + GTK_SIGNAL_FUNC(ButtonPress), this); gtk_clist_set_shadow_type(GTK_CLIST(list), GTK_SHADOW_NONE); gtk_widget_realize(id); diff --git a/include/Platform.h b/include/Platform.h index 74de63174..6d37799e7 100644 --- a/include/Platform.h +++ b/include/Platform.h @@ -333,6 +333,11 @@ public: }; /** + * A simple callback action passing one piece of untyped user data. + */ +typedef void (*CallBackAction)(void*); + +/** * Class to hide the details of window manipulation. * Does not own the window which will normally have a longer life than this object. */ @@ -373,7 +378,9 @@ public: /** * Listbox management. */ + class ListBox : public Window { +private: #if PLAT_GTK WindowID list; WindowID scroller; @@ -383,6 +390,9 @@ class ListBox : public Window { unsigned int maxItemCharacters; unsigned int aveCharWidth; public: + CallBackAction doubleClickAction; + void *doubleClickActionData; +public: ListBox(); virtual ~ListBox(); void Create(Window &parent, int ctrlID); @@ -398,6 +408,10 @@ public: int Find(const char *prefix); void GetValue(int n, char *value, int len); void Sort(); + void SetDoubleClickAction(CallBackAction action, void *data) { + doubleClickAction = action; + doubleClickActionData = data; + } }; /** diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 75a8ffffa..f938a1f4d 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -173,6 +173,11 @@ int ScintillaBase::KeyCommand(unsigned int iMessage) { return Editor::KeyCommand(iMessage); } +void ScintillaBase::AutoCompleteDoubleClick(void* p) { + ScintillaBase* sci = reinterpret_cast<ScintillaBase*>(p); + sci->AutoCompleteCompleted(); +} + void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) { //Platform::DebugPrintf("AutoComplete %s\n", list); ct.CallTipCancel(); @@ -222,6 +227,7 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) { ac.lb.SetPositionRelative(rcac, wMain); ac.lb.SetFont(vs.styles[STYLE_DEFAULT].font); ac.lb.SetAverageCharWidth(vs.styles[STYLE_DEFAULT].aveCharWidth); + ac.lb.SetDoubleClickAction(AutoCompleteDoubleClick, this); ac.SetList(list); diff --git a/src/ScintillaBase.h b/src/ScintillaBase.h index ca4695355..375cc9a74 100644 --- a/src/ScintillaBase.h +++ b/src/ScintillaBase.h @@ -20,7 +20,7 @@ protected: enum { idCallTip=1, idAutoComplete=2, - + idcmdUndo=10, idcmdRedo=11, idcmdCut=12, @@ -38,7 +38,7 @@ protected: int listType; ///< 0 is an autocomplete list SString userListSelected; ///< Receives listbox selected string - + #ifdef SCI_LEXER int lexLanguage; LexerModule *lexCurrent; @@ -56,24 +56,25 @@ protected: virtual void Finalise() = 0; virtual void RefreshColourPalette(Palette &pal, bool want); - + virtual void AddCharUTF(char *s, unsigned int len); void Command(int cmdId); virtual void CancelModes(); virtual int KeyCommand(unsigned int iMessage); - + void AutoCompleteStart(int lenEntered, const char *list); void AutoCompleteCancel(); void AutoCompleteMove(int delta); void AutoCompleteChanged(char ch=0); void AutoCompleteCompleted(char fillUp='\0'); void AutoCompleteMoveToCurrentWord(); + static void AutoCompleteDoubleClick(void* p); virtual void CreateCallTipWindow(PRectangle rc) = 0; - + virtual void AddToPopUp(const char *label, int cmd=0, bool enabled=true) = 0; void ContextMenu(Point pt); - + virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); virtual void NotifyStyleToNeeded(int endStyleNeeded); |