SF.net SVN: geany:[4021] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Fri Jul 24 09:59:23 UTC 2009


Revision: 4021
          http://geany.svn.sourceforge.net/geany/?rev=4021&view=rev
Author:   eht16
Date:     2009-07-24 09:59:23 +0000 (Fri, 24 Jul 2009)

Log Message:
-----------
Attempt to fix reshowing calltips after the autocompletion list has been shown.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/editor.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-07-24 00:59:12 UTC (rev 4020)
+++ trunk/ChangeLog	2009-07-24 09:59:23 UTC (rev 4021)
@@ -1,3 +1,10 @@
+2009-07-24  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/editor.c:
+   Attempt to fix reshowing calltips after the autocompletion list
+   has been shown.
+
+
 2009-07-23  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/utils.c, src/utils.h, src/toolbar.c, src/plugindata.h,

Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c	2009-07-24 00:59:12 UTC (rev 4020)
+++ trunk/src/editor.c	2009-07-24 09:59:23 UTC (rev 4021)
@@ -714,9 +714,17 @@
 }
 
 
+typedef struct
+{
+	gint message;
+	gint pos;
+	gchar *text;
+} CalltipReshowInfo;
+
+
 static gboolean reshow_calltip(gpointer data)
 {
-	SCNotification *nt = data;
+	CalltipReshowInfo *cri = data;
 
 	g_return_val_if_fail(calltip.sci != NULL, FALSE);
 
@@ -726,16 +734,19 @@
 	SSM(calltip.sci, SCI_CALLTIPSHOW, calltip.pos, (sptr_t) calltip.text);
 
 	/* now autocompletion has been cancelled by SCI_CALLTIPSHOW, so do it manually */
-	if (nt->nmhdr.code == SCN_AUTOCSELECTION)
+	if (cri->message == SCN_AUTOCSELECTION)
 	{
 		gint pos = SSM(calltip.sci, SCI_GETCURRENTPOS, 0, 0);
 
-		sci_set_selection_start(calltip.sci, nt->lParam);
+		sci_set_selection_start(calltip.sci, cri->pos);
 		sci_set_selection_end(calltip.sci, pos);
 		sci_replace_sel(calltip.sci, "");	/* clear root of word */
-		SSM(calltip.sci, SCI_INSERTTEXT, nt->lParam, (sptr_t) nt->text);
-		sci_goto_pos(calltip.sci, nt->lParam + strlen(nt->text), FALSE);
+		SSM(calltip.sci, SCI_INSERTTEXT, cri->pos, (sptr_t) cri->text);
+		sci_goto_pos(calltip.sci, cri->pos + strlen(cri->text), FALSE);
 	}
+	g_free(cri->text);
+	g_free(cri);
+
 	return FALSE;
 }
 
@@ -848,10 +859,13 @@
 			 * if they were showing */
 			if (calltip.set)
 			{
+				CalltipReshowInfo *cri = g_new0(CalltipReshowInfo, 1);
+				cri->message = nt->nmhdr.code;
+				cri->message = nt->lParam;
+				cri->text = g_strdup(nt->text);
 				/* delay the reshow of the calltip window to make sure it is actually displayed,
 				 * without it might be not visible on SCN_AUTOCCANCEL */
-				/* TODO g_idle_add() seems to be not enough, only with a timeout it works stable */
-				g_timeout_add(50, reshow_calltip, nt);
+				g_idle_add(reshow_calltip, cri);
 			}
 			break;
 		}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list