aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/PlatGTK.cxx
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2006-04-25 13:05:22 +0000
committernyamatongwe <devnull@localhost>2006-04-25 13:05:22 +0000
commit1d1a142d95b66e59705f77a242cb774b4008b9a4 (patch)
treedf7d45d8394d570deec36eb729e69571c3efa2fa /gtk/PlatGTK.cxx
parent6602cb771cb3d8bac09ece2bb2de7d705a6833b1 (diff)
downloadscintilla-mirror-1d1a142d95b66e59705f77a242cb774b4008b9a4.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);
}