PATCH: resize gtkclist to optimal width by double clicking the resize window
- From: Dirk Luetjens <dirk luedi oche de>
- To: gtk-list redhat com
- Subject: PATCH: resize gtkclist to optimal width by double clicking the resize window
- Date: Mon, 30 Aug 1999 21:32:25 +0200
Hello,
I played a little with gtkclist and implemeted a feature, that let you
resize a column to the optimal width with double clicking on the
resize window.
Perhaps someone with mor GTK+ knowledge can look into it and make it
better or include it into the sources.
Dirk
--- gtk+-1.2.2/gtk/gtkclist.c Tue Mar 23 22:59:43 1999
+++ gtk+-1.2.2.local/gtk/gtkclist.c Thu Aug 26 01:13:19 1999
@@ -1030,6 +1030,8 @@
{
GTK_CLIST_UNSET_FLAG (clist, CLIST_SHOW_TITLES);
}
+
+ GTK_CLIST_UNSET_FLAG (clist, CLIST_XOR_VISIBLE);
}
/* GTKCLIST PUBLIC INTERFACE
@@ -1868,13 +1870,16 @@
return;
GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
+ GTK_CLIST_UNSET_FLAG (clist, CLIST_OPTIMAL_WIDTH);
gtk_grab_remove (GTK_WIDGET (clist));
gdk_pointer_ungrab (GDK_CURRENT_TIME);
clist->drag_pos = -1;
- if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1)
+ if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1 && GTK_CLIST_XOR_VISIBLE(clist))
draw_xor_line (clist);
+ GTK_CLIST_UNSET_FLAG (clist, CLIST_XOR_VISIBLE);
+
if (GTK_CLIST_ADD_MODE(clist))
{
gdk_gc_set_line_attributes (clist->xor_gc, 1, GDK_LINE_ON_OFF_DASH, 0,0);
@@ -5081,7 +5086,17 @@
if (GTK_CLIST_ADD_MODE(clist))
gdk_gc_set_line_attributes (clist->xor_gc, 1, GDK_LINE_SOLID, 0, 0);
- draw_xor_line (clist);
+
+ GTK_CLIST_UNSET_FLAG (clist, CLIST_XOR_VISIBLE);
+
+ if (event->type == GDK_2BUTTON_PRESS) {
+ gint optimal_width;
+
+ GTK_CLIST_SET_FLAG (clist, CLIST_OPTIMAL_WIDTH);
+
+ optimal_width = gtk_clist_optimal_column_width (clist, i);
+ gtk_clist_set_column_width (clist, i, optimal_width);
+ }
}
return FALSE;
}
@@ -5124,7 +5139,7 @@
gtk_grab_remove (widget);
gdk_pointer_ungrab (event->time);
- if (clist->x_drag >= 0)
+ if (clist->x_drag >= 0 && GTK_CLIST_XOR_VISIBLE(clist))
draw_xor_line (clist);
if (GTK_CLIST_ADD_MODE(clist))
@@ -5134,8 +5149,13 @@
gdk_gc_set_dashes (clist->xor_gc, 0, "\4\4", 2);
}
- width = new_column_width (clist, i, &x);
- gtk_clist_set_column_width (clist, i, width);
+ if (!GTK_CLIST_OPTIMAL_WIDTH(clist)) {
+ width = new_column_width (clist, i, &x);
+ gtk_clist_set_column_width (clist, i, width);
+ }
+
+ GTK_CLIST_UNSET_FLAG (clist, CLIST_OPTIMAL_WIDTH);
+
return FALSE;
}
@@ -5200,7 +5220,7 @@
if (clist->drag_button > 0)
button_actions = clist->button_actions[clist->drag_button - 1];
- if (GTK_CLIST_IN_DRAG(clist))
+ if (GTK_CLIST_IN_DRAG(clist) && !GTK_CLIST_OPTIMAL_WIDTH(clist))
{
if (event->is_hint || event->window != widget->window)
gtk_widget_get_pointer (widget, &x, NULL);
@@ -5211,13 +5231,14 @@
if (x != clist->x_drag)
{
/* x_drag < 0 indicates that the xor line is already invisible */
- if (clist->x_drag >= 0)
+ if (clist->x_drag >= 0 && GTK_CLIST_XOR_VISIBLE(clist))
draw_xor_line (clist);
clist->x_drag = x;
if (clist->x_drag >= 0)
draw_xor_line (clist);
+ GTK_CLIST_SET_FLAG (clist, CLIST_XOR_VISIBLE);
}
if (new_width <= MAX (COLUMN_MIN_WIDTH + 1,
--- gtk+-1.2.2/gtk/gtkclist.h Sun Mar 21 08:07:03 1999
+++ gtk+-1.2.2.local/gtk/gtkclist.h Wed Aug 25 23:10:30 1999
@@ -54,7 +54,9 @@
GTK_CLIST_REORDERABLE = 1 << 7,
GTK_CLIST_USE_DRAG_ICONS = 1 << 8,
GTK_CLIST_DRAW_DRAG_LINE = 1 << 9,
- GTK_CLIST_DRAW_DRAG_RECT = 1 << 10
+ GTK_CLIST_DRAW_DRAG_RECT = 1 << 10,
+ GTK_CLIST_XOR_VISIBLE = 1 << 11,
+ GTK_CLIST_OPTIMAL_WIDTH = 1 << 12
};
/* cell types */
@@ -94,6 +96,7 @@
#define GTK_CLIST_UNSET_FLAG(clist,flag) (GTK_CLIST_FLAGS (clist) &= ~(GTK_ ## flag))
#define GTK_CLIST_IN_DRAG(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_IN_DRAG)
+#define GTK_CLIST_OPTIMAL_DRAG(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_OPTIMAL_DRAG)
#define GTK_CLIST_ROW_HEIGHT_SET(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_ROW_HEIGHT_SET)
#define GTK_CLIST_SHOW_TITLES(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_SHOW_TITLES)
#define GTK_CLIST_CHILD_HAS_FOCUS(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_CHILD_HAS_FOCUS)
@@ -104,6 +107,8 @@
#define GTK_CLIST_USE_DRAG_ICONS(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_USE_DRAG_ICONS)
#define GTK_CLIST_DRAW_DRAG_LINE(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_DRAW_DRAG_LINE)
#define GTK_CLIST_DRAW_DRAG_RECT(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_DRAW_DRAG_RECT)
+#define GTK_CLIST_XOR_VISIBLE(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_XOR_VISIBLE)
+#define GTK_CLIST_OPTIMAL_WIDTH(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_OPTIMAL_WIDTH)
#define GTK_CLIST_ROW(_glist_) ((GtkCListRow *)((_glist_)->data))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]