diff options
| -rw-r--r-- | gtk/PlatGTK.cxx | 34 | ||||
| -rw-r--r-- | gtk/ScintillaGTK.cxx | 23 | 
2 files changed, 42 insertions, 15 deletions
| diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index f841a96f0..9abeb5454 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -1968,6 +1968,31 @@ static gboolean ButtonPress(GtkWidget *, GdkEventButton* ev, gpointer p) {  	return FALSE;  } +#if GTK_MAJOR_VERSION >= 2 +/* Change the active color to the selected color so the listbox uses the color +scheme that it would use if it had the focus. */ +static void StyleSet(GtkWidget *w, GtkStyle*, void*) { +	GtkStyle* style; + +	g_return_if_fail(w != NULL); + +	/* Copy the selected color to active.  Note that the modify calls will cause +	recursive calls to this function after the value is updated and w->style to +	be set to a new object */ +	style = gtk_widget_get_style(w); +	if (style == NULL) +		return; +	if (!gdk_color_equal(&style->base[GTK_STATE_SELECTED], &style->base[GTK_STATE_ACTIVE])) +		gtk_widget_modify_base(w, GTK_STATE_ACTIVE, &style->base[GTK_STATE_SELECTED]); + +	style = gtk_widget_get_style(w); +	if (style == NULL) +		return; +	if (!gdk_color_equal(&style->text[GTK_STATE_SELECTED], &style->text[GTK_STATE_ACTIVE])) +		gtk_widget_modify_text(w, GTK_STATE_ACTIVE, &style->text[GTK_STATE_SELECTED]); +} +#endif +  void ListBoxX::Create(Window &, int, Point, int, bool) {  	id = gtk_window_new(GTK_WINDOW_POPUP); @@ -2003,6 +2028,8 @@ void ListBoxX::Create(Window &, int, Point, int, bool) {  		gtk_list_store_new(N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING);  	list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); +	g_signal_connect(G_OBJECT(list), "style-set", G_CALLBACK(StyleSet), NULL); +  	GtkTreeSelection *selection =  		gtk_tree_view_get_selection(GTK_TREE_VIEW(list));  	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); @@ -2011,7 +2038,7 @@ void ListBoxX::Create(Window &, int, Point, int, bool) {  	/* Columns */  	GtkTreeViewColumn *column = gtk_tree_view_column_new(); -	gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); +	gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);  	gtk_tree_view_column_set_title(column, "Autocomplete");  	GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new(); @@ -2020,11 +2047,14 @@ void ListBoxX::Create(Window &, int, Point, int, bool) {  										"pixbuf", PIXBUF_COLUMN);  	renderer = gtk_cell_renderer_text_new(); +	gtk_cell_renderer_text_set_fixed_height_from_font(GTK_CELL_RENDERER_TEXT(renderer), 1);  	gtk_tree_view_column_pack_start(column, renderer, TRUE);  	gtk_tree_view_column_add_attribute(column, renderer,  										"text", TEXT_COLUMN);  	gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); +	if (g_object_class_find_property(G_OBJECT_GET_CLASS(list), "fixed-height-mode")) +		g_object_set(G_OBJECT(list), "fixed-height-mode", TRUE, NULL);  	gtk_container_add(GTK_CONTAINER(PWidget(scroller)), PWidget(list));  	gtk_widget_show(PWidget(list)); @@ -2047,7 +2077,7 @@ void ListBoxX::SetFont(Font &scint_font) {  	}  #else  	// Only do for Pango font as there have been crashes for GDK fonts -	if (PFont(scint_font)->pfd) { +	if (Created() && PFont(scint_font)->pfd) {  		// Current font is Pango font  		gtk_widget_modify_font(PWidget(list), PFont(scint_font)->pfd);  	} diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 6e560decb..9361df5e3 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -527,6 +527,7 @@ void ScintillaGTK::Map(GtkWidget *widget) {  void ScintillaGTK::UnMapThis() {  	//Platform::DebugPrintf("ScintillaGTK::unmap this\n");  	GTK_WIDGET_UNSET_FLAGS(PWidget(wMain), GTK_MAPPED); +	DropGraphics();  	gdk_window_hide(PWidget(wMain)->window);  	gtk_widget_unmap(PWidget(wText));  	gtk_widget_unmap(PWidget(scrollbarh)); @@ -1189,14 +1190,6 @@ const char *ScintillaGTK::CharacterSetID() const {  #define IS_ACC_OR_CHAR(x) \  	(IS_CHAR(x)) || (IS_ACC(x)) -#define IS_ACC(x) \ -	((x) >= 65103 && (x) <= 65111) -#define IS_CHAR(x) \ -	((x) >= 0 && (x) <= 128) - -#define IS_ACC_OR_CHAR(x) \ -	(IS_CHAR(x)) || (IS_ACC(x)) -  static int MakeAccent(int key, int acc) {  	const char *conv[] = {  		"aeiounc AEIOUNC", @@ -1399,7 +1392,7 @@ bool ScintillaGTK::OwnPrimarySelection() {  void ScintillaGTK::ClaimSelection() {  	// X Windows has a 'primary selection' as well as the clipboard.  	// Whenever the user selects some text, we become the primary selection -	if (currentPos != anchor) { +	if (currentPos != anchor && GTK_WIDGET_REALIZED(GTK_WIDGET(PWidget(wMain)))) {  		primarySelection = true;  		gtk_selection_owner_set(GTK_WIDGET(PWidget(wMain)),  		                        GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); @@ -1491,6 +1484,7 @@ void ScintillaGTK::ReceivedSelection(GtkSelectionData *selection_data) {  				SetEmptySelection(currentPos + selText.len);  			}  			pdoc->EndUndoAction(); +			EnsureCaretVisible();  		}  	}  //	else fprintf(stderr, "Target non string %d %d\n", (int)(selection_data->type), @@ -1506,9 +1500,12 @@ void ScintillaGTK::ReceivedDrop(GtkSelectionData *selection_data) {  			GetGtkSelectionText(selection_data, selText);  			DropAt(posDrop, selText.s, false, selText.rectangular);  		} -	} else { -		char *ptr = reinterpret_cast<char *>(selection_data->data); -		NotifyURIDropped(ptr); +	} else if (selection_data->length > 0) { +		char *ptr = new char[selection_data->length + 1]; +		ptr[selection_data->length] = '\0'; +		memcpy(ptr, selection_data->data, selection_data->length); + 		NotifyURIDropped(ptr); +		delete []ptr;  	}  	Redraw();  } @@ -2199,7 +2196,7 @@ gint ScintillaGTK::ExposeTextThis(GtkWidget * /*widget*/, GdkEventExpose *ose) {  	paintState = notPainting;  	if (rgnUpdate) { -		g_free(rgnUpdate); +		gdk_region_destroy(rgnUpdate);  	}  	rgnUpdate = 0; | 
