diff options
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
| -rw-r--r-- | gtk/ScintillaGTK.cxx | 39 | 
1 files changed, 33 insertions, 6 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index fce22ab9b..54c025fbc 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -202,7 +202,10 @@ private:  	                        GtkSelectionData *selection_data, guint info, guint time);  	static gint TimeOut(ScintillaGTK *sciThis);  	static void PopUpCB(ScintillaGTK *sciThis, guint action, GtkWidget *widget); +  	static gint ExposeCT(GtkWidget *widget, GdkEventExpose *ose, CallTip *ct); +	static gint PressCT(GtkWidget *widget, GdkEventButton *event, ScintillaGTK *sciThis); +  	static sptr_t DirectFunction(ScintillaGTK *sciThis,  	                             unsigned int iMessage, uptr_t wParam, sptr_t lParam);  }; @@ -892,15 +895,22 @@ void ScintillaGTK::Paste() {  }  void ScintillaGTK::CreateCallTipWindow(PRectangle rc) { -	ct.wCallTip = gtk_window_new(GTK_WINDOW_POPUP); -	ct.wDraw = gtk_drawing_area_new(); -	gtk_container_add(GTK_CONTAINER(PWidget(ct.wCallTip)), PWidget(ct.wDraw)); -	gtk_signal_connect(GTK_OBJECT(PWidget(ct.wDraw)), "expose_event", -	                   GtkSignalFunc(ScintillaGTK::ExposeCT), &ct); -	gtk_widget_set_events(PWidget(ct.wDraw), GDK_EXPOSURE_MASK); +	if (!ct.wCallTip.Created()) { +		ct.wCallTip = gtk_window_new(GTK_WINDOW_POPUP); +		ct.wDraw = gtk_drawing_area_new(); +		gtk_container_add(GTK_CONTAINER(PWidget(ct.wCallTip)), PWidget(ct.wDraw)); +		gtk_signal_connect(GTK_OBJECT(PWidget(ct.wDraw)), "expose_event", +				   GtkSignalFunc(ScintillaGTK::ExposeCT), &ct); +		gtk_signal_connect(GTK_OBJECT(PWidget(ct.wDraw)), "button_press_event", +				   GtkSignalFunc(ScintillaGTK::PressCT), static_cast<void *>(this)); +		gtk_widget_set_events(PWidget(ct.wDraw), +			GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK); +	}  	gtk_drawing_area_size(GTK_DRAWING_AREA(PWidget(ct.wDraw)),  	                      rc.Width(), rc.Height());  	ct.wDraw.Show(); +	gtk_widget_set_usize(PWidget(ct.wCallTip), rc.Width(), rc.Height()); +	//gtk_widget_queue_resize(PWidget(ct.wCallTip));  }  void ScintillaGTK::AddToPopUp(const char *label, int cmd, bool enabled) { @@ -1702,6 +1712,23 @@ void ScintillaGTK::PopUpCB(ScintillaGTK *sciThis, guint action, GtkWidget *) {  	}  } +gint ScintillaGTK::PressCT(GtkWidget *widget, GdkEventButton *event, ScintillaGTK *sciThis) { +	if (event->window != widget->window) +		return FALSE; +	if (event->type != GDK_BUTTON_PRESS) +		return FALSE; +	Point pt; +	pt.x = int(event->x); +	pt.y = int(event->y); +	sciThis->ct.MouseClick(pt); +	sciThis->CallTipClick(); +#if GTK_MAJOR_VERSION >= 2 +	return TRUE; +#else +	return FALSE; +#endif +} +  gint ScintillaGTK::ExposeCT(GtkWidget *widget, GdkEventExpose * /*ose*/, CallTip *ctip) {  	Surface *surfaceWindow = Surface::Allocate();  	if (surfaceWindow) {  | 
