aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/PlatGTK.cxx12
-rw-r--r--gtk/ScintillaGTK.cxx39
2 files changed, 40 insertions, 11 deletions
diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx
index b8af29fbf..016e1b1d2 100644
--- a/gtk/PlatGTK.cxx
+++ b/gtk/PlatGTK.cxx
@@ -1664,11 +1664,13 @@ void ListBoxX::SetFont(Font &scint_font) {
#else
GtkStyle *styleCurrent = gtk_widget_get_style(GTK_WIDGET(PWidget(list)));
GdkFont *fontCurrent = gtk_style_get_font(styleCurrent);
- if (!gdk_font_equal(fontCurrent, PFont(scint_font)->pfont)) {
- GtkStyle *styleNew = gtk_style_copy(styleCurrent);
- gtk_style_set_font(styleNew, PFont(scint_font)->pfont);
- gtk_widget_set_style(GTK_WIDGET(PWidget(list)), styleNew);
- gtk_style_unref(styleCurrent);
+ if (PFont(scint_font)->pfont) {
+ if (!gdk_font_equal(fontCurrent, PFont(scint_font)->pfont)) {
+ GtkStyle *styleNew = gtk_style_copy(styleCurrent);
+ gtk_style_set_font(styleNew, PFont(scint_font)->pfont);
+ gtk_widget_set_style(GTK_WIDGET(PWidget(list)), styleNew);
+ gtk_style_unref(styleCurrent);
+ }
}
#endif
}
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) {