aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/PlatGTK.cxx
diff options
context:
space:
mode:
authornyamatongwe <unknown>2006-04-25 13:05:22 +0000
committernyamatongwe <unknown>2006-04-25 13:05:22 +0000
commit8fcd543a7e41bef0e040a7c9b77ac8c7d1ac6439 (patch)
treedf7d45d8394d570deec36eb729e69571c3efa2fa /gtk/PlatGTK.cxx
parent7d47a101ed4562fe1a27905d4eb1f42d0d3b578f (diff)
downloadscintilla-mirror-8fcd543a7e41bef0e040a7c9b77ac8c7d1ac6439.tar.gz
Set of patches from John Ehresman:
Make sure the ListBox widget is created before modifying it. Call DropGraphics() when a widget is unmapped to conserve resources and because DropGraphics() ends up being called from the map signal handler so nothing is saved by not calling it. Remove the nearly identical accent / character macro re-definitions. Make sure widget is realized before grabbing the primary selection. Ensure the caret is visible after a selection is pasted. Ensure uri data is NULL-terminated before calling NotifyURIDropped. Use correct call, gdk_region_destroy, to free a region. The fixed-height-mode property is used to optimize display of large autocompletion lists. This property was added in gtk 2.4, but is probed for at runtime so the code should work with older gtk versions. The active color is set to the selected color on the list box so the selected lines are more clearly selected when the listbox widget does not have the focus. The autocompletion popup never gets the focus so the active color ends up being used.
Diffstat (limited to 'gtk/PlatGTK.cxx')
-rw-r--r--gtk/PlatGTK.cxx34
1 files changed, 32 insertions, 2 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);
}