[geany/geany] df5b2f: GTK: fix cached completion popup window sizing

Colomban Wendling git-noreply at xxxxx
Mon Sep 8 13:35:28 UTC 2014


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Mon, 08 Sep 2014 13:35:28 UTC
Commit:      df5b2fd81065650259a87b8eb901343d36676e59
             https://github.com/geany/geany/commit/df5b2fd81065650259a87b8eb901343d36676e59

Log Message:
-----------
GTK: fix cached completion popup window sizing

Only cache the popup window itself and not its content, as it seems the
window sizing is affected whether the content was just created or not.


Modified Paths:
--------------
    scintilla/gtk/PlatGTK.cxx

Modified: scintilla/gtk/PlatGTK.cxx
27 lines changed, 14 insertions(+), 13 deletions(-)
===================================================================
@@ -1226,17 +1226,19 @@ Window::~Window() {}
 
 void Window::Destroy() {
 	if (wid) {
-		ListBox *listbox = dynamic_cast<ListBox*>(this);
-		if (listbox) {
+		if (dynamic_cast<ListBox*>(this)) {
 			gtk_widget_hide(GTK_WIDGET(wid));
-			listbox->Clear();
+			// clear up window content
+			GtkWidget *child = gtk_bin_get_child(GTK_BIN(wid));
+			if (child)
+				gtk_widget_destroy(child);
 			// resize the window to the smallest possible size for it to adapt
 			// to future content
 			gtk_window_resize(GTK_WINDOW(wid), 1, 1);
 		} else {
 			gtk_widget_destroy(GTK_WIDGET(wid));
-			wid = 0;
 		}
+		wid = 0;
 	}
 }
 
@@ -1421,6 +1423,7 @@ enum {
 };
 
 class ListBoxX : public ListBox {
+	WindowID widCached;
 	WindowID list;
 	WindowID scroller;
 	void *pixhash;
@@ -1433,7 +1436,7 @@ class ListBoxX : public ListBox {
 	CallBackAction doubleClickAction;
 	void *doubleClickActionData;
 
-	ListBoxX() : list(0), scroller(0), pixhash(NULL), pixbuf_renderer(0),
+	ListBoxX() : widCached(0), list(0), scroller(0), pixhash(NULL), pixbuf_renderer(0),
 		desiredVisibleRows(5), maxItemCharacters(0),
 		aveCharWidth(1), doubleClickAction(NULL), doubleClickActionData(NULL) {
 	}
@@ -1442,9 +1445,9 @@ class ListBoxX : public ListBox {
 			g_hash_table_foreach((GHashTable *) pixhash, list_image_free, NULL);
 			g_hash_table_destroy((GHashTable *) pixhash);
 		}
-		if (wid) {
-			gtk_widget_destroy(GTK_WIDGET(wid));
-			wid = 0;
+		if (widCached) {
+			gtk_widget_destroy(GTK_WIDGET(widCached));
+			wid = widCached = 0;
 		}
 	}
 	virtual void SetFont(Font &font);
@@ -1538,12 +1541,10 @@ static void StyleSet(GtkWidget *w, GtkStyle*, void*) {
 }
 
 void ListBoxX::Create(Window &, int, Point, int, bool, int) {
-	if (wid) {
-		gtk_widget_realize(PWidget(wid));
-		return;
-	}
+	if (widCached == 0)
+		widCached = gtk_window_new(GTK_WINDOW_POPUP);
 
-	wid = gtk_window_new(GTK_WINDOW_POPUP);
+	wid = widCached;
 
 	GtkWidget *frame = gtk_frame_new(NULL);
 	gtk_widget_show(frame);



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list