* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
+#undef GDK_DISABLE_DEPRECATED
+#undef GTK_DISABLE_DEPRECATED
+
+#include <config.h>
+
#include <stdlib.h>
#include <string.h>
-#include "config.h"
+
#include "gtkmain.h"
+#include "gtkobject.h"
#include "gtkclist.h"
#include "gtkbindings.h"
#include "gtkdnd.h"
+#include "gtkmarshalers.h"
+#include "gtkintl.h"
#include <gdk/gdkkeysyms.h>
+#include "gtkalias.h"
/* length of button_actions array */
#define MAX_BUTTON 5
-/* the number rows memchunk expands at a time */
-#define CLIST_OPTIMUM_SIZE 64
-
/* the width of the column resize windows */
#define DRAG_WIDTH 6
static GtkContainerClass *parent_class = NULL;
static guint clist_signals[LAST_SIGNAL] = {0};
-static GtkTargetEntry clist_target_table = { "gtk-clist-drag-reorder", 0, 0};
+static const GtkTargetEntry clist_target_table = { "gtk-clist-drag-reorder", 0, 0};
GtkType
gtk_clist_get_type (void)
(GtkClassInitFunc) NULL,
};
+ I_("GtkCList");
clist_type = gtk_type_unique (GTK_TYPE_CONTAINER, &clist_info);
}
klass->set_cell_contents = set_cell_contents;
klass->cell_size_request = cell_size_request;
- gtk_object_add_arg_type ("GtkCList::n_columns",
+ gtk_object_add_arg_type ("GtkCList::n-columns",
GTK_TYPE_UINT,
- GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT_ONLY,
+ GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME,
ARG_N_COLUMNS);
- gtk_object_add_arg_type ("GtkCList::shadow_type",
+ gtk_object_add_arg_type ("GtkCList::shadow-type",
GTK_TYPE_SHADOW_TYPE,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_SHADOW_TYPE);
- gtk_object_add_arg_type ("GtkCList::selection_mode",
+ gtk_object_add_arg_type ("GtkCList::selection-mode",
GTK_TYPE_SELECTION_MODE,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_SELECTION_MODE);
- gtk_object_add_arg_type ("GtkCList::row_height",
+ gtk_object_add_arg_type ("GtkCList::row-height",
GTK_TYPE_UINT,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_ROW_HEIGHT);
gtk_object_add_arg_type ("GtkCList::reorderable",
GTK_TYPE_BOOL,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_REORDERABLE);
- gtk_object_add_arg_type ("GtkCList::titles_active",
+ gtk_object_add_arg_type ("GtkCList::titles-active",
GTK_TYPE_BOOL,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_TITLES_ACTIVE);
- gtk_object_add_arg_type ("GtkCList::use_drag_icons",
+ gtk_object_add_arg_type ("GtkCList::use-drag-icons",
GTK_TYPE_BOOL,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_USE_DRAG_ICONS);
- gtk_object_add_arg_type ("GtkCList::sort_type",
+ gtk_object_add_arg_type ("GtkCList::sort-type",
GTK_TYPE_SORT_TYPE,
- GTK_ARG_READWRITE,
+ GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
ARG_SORT_TYPE);
widget_class->set_scroll_adjustments_signal =
- gtk_signal_new ("set_scroll_adjustments",
+ gtk_signal_new (I_("set_scroll_adjustments"),
GTK_RUN_LAST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, set_scroll_adjustments),
- gtk_marshal_VOID__OBJECT_OBJECT,
+ _gtk_marshal_VOID__OBJECT_OBJECT,
GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
clist_signals[SELECT_ROW] =
- gtk_signal_new ("select_row",
+ gtk_signal_new (I_("select_row"),
GTK_RUN_FIRST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, select_row),
- gtk_marshal_VOID__INT_INT_BOXED,
+ _gtk_marshal_VOID__INT_INT_BOXED,
GTK_TYPE_NONE, 3,
GTK_TYPE_INT,
GTK_TYPE_INT,
- GDK_TYPE_EVENT);
+ GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
clist_signals[UNSELECT_ROW] =
- gtk_signal_new ("unselect_row",
+ gtk_signal_new (I_("unselect_row"),
GTK_RUN_FIRST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, unselect_row),
- gtk_marshal_VOID__INT_INT_BOXED,
+ _gtk_marshal_VOID__INT_INT_BOXED,
GTK_TYPE_NONE, 3, GTK_TYPE_INT,
GTK_TYPE_INT, GDK_TYPE_EVENT);
clist_signals[ROW_MOVE] =
- gtk_signal_new ("row_move",
+ gtk_signal_new (I_("row_move"),
GTK_RUN_LAST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, row_move),
- gtk_marshal_VOID__INT_INT,
+ _gtk_marshal_VOID__INT_INT,
GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT);
clist_signals[CLICK_COLUMN] =
- gtk_signal_new ("click_column",
+ gtk_signal_new (I_("click_column"),
GTK_RUN_FIRST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, click_column),
- gtk_marshal_VOID__INT,
+ _gtk_marshal_VOID__INT,
GTK_TYPE_NONE, 1, GTK_TYPE_INT);
clist_signals[RESIZE_COLUMN] =
- gtk_signal_new ("resize_column",
+ gtk_signal_new (I_("resize_column"),
GTK_RUN_LAST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, resize_column),
- gtk_marshal_VOID__INT_INT,
+ _gtk_marshal_VOID__INT_INT,
GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT);
clist_signals[TOGGLE_FOCUS_ROW] =
- gtk_signal_new ("toggle_focus_row",
+ gtk_signal_new (I_("toggle_focus_row"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, toggle_focus_row),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[SELECT_ALL] =
- gtk_signal_new ("select_all",
+ gtk_signal_new (I_("select_all"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, select_all),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[UNSELECT_ALL] =
- gtk_signal_new ("unselect_all",
+ gtk_signal_new (I_("unselect_all"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, unselect_all),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[UNDO_SELECTION] =
- gtk_signal_new ("undo_selection",
+ gtk_signal_new (I_("undo_selection"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, undo_selection),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[START_SELECTION] =
- gtk_signal_new ("start_selection",
+ gtk_signal_new (I_("start_selection"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, start_selection),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[END_SELECTION] =
- gtk_signal_new ("end_selection",
+ gtk_signal_new (I_("end_selection"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, end_selection),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[TOGGLE_ADD_MODE] =
- gtk_signal_new ("toggle_add_mode",
+ gtk_signal_new (I_("toggle_add_mode"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, toggle_add_mode),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
clist_signals[EXTEND_SELECTION] =
- gtk_signal_new ("extend_selection",
+ gtk_signal_new (I_("extend_selection"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, extend_selection),
- gtk_marshal_VOID__ENUM_FLOAT_BOOL,
+ _gtk_marshal_VOID__ENUM_FLOAT_BOOLEAN,
GTK_TYPE_NONE, 3,
GTK_TYPE_SCROLL_TYPE, GTK_TYPE_FLOAT, GTK_TYPE_BOOL);
clist_signals[SCROLL_VERTICAL] =
- gtk_signal_new ("scroll_vertical",
+ gtk_signal_new (I_("scroll_vertical"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, scroll_vertical),
- gtk_marshal_VOID__ENUM_FLOAT,
+ _gtk_marshal_VOID__ENUM_FLOAT,
GTK_TYPE_NONE, 2, GTK_TYPE_SCROLL_TYPE, GTK_TYPE_FLOAT);
clist_signals[SCROLL_HORIZONTAL] =
- gtk_signal_new ("scroll_horizontal",
+ gtk_signal_new (I_("scroll_horizontal"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, scroll_horizontal),
- gtk_marshal_VOID__ENUM_FLOAT,
+ _gtk_marshal_VOID__ENUM_FLOAT,
GTK_TYPE_NONE, 2, GTK_TYPE_SCROLL_TYPE, GTK_TYPE_FLOAT);
clist_signals[ABORT_COLUMN_RESIZE] =
- gtk_signal_new ("abort_column_resize",
+ gtk_signal_new (I_("abort_column_resize"),
GTK_RUN_LAST | GTK_RUN_ACTION,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkCListClass, abort_column_resize),
- gtk_marshal_VOID__VOID,
+ _gtk_marshal_VOID__VOID,
GTK_TYPE_NONE, 0);
binding_set = gtk_binding_set_by_class (klass);
gtk_binding_entry_add_signal (binding_set, GDK_Up, 0,
- "scroll_vertical", 2,
+ "scroll_vertical", 2,
GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD,
GTK_TYPE_FLOAT, 0.0);
gtk_binding_entry_add_signal (binding_set, GDK_KP_Up, 0,
"scroll_horizontal", 2,
GTK_TYPE_ENUM, GTK_SCROLL_JUMP,
GTK_TYPE_FLOAT, 1.0);
+
gtk_binding_entry_add_signal (binding_set, GDK_KP_End, 0,
"scroll_horizontal", 2,
GTK_TYPE_ENUM, GTK_SCROLL_JUMP,
GTK_TYPE_FLOAT, 1.0);
-
gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0,
"undo_selection", 0);
GTK_CLIST_SET_FLAG (clist, CLIST_DRAW_DRAG_LINE);
GTK_CLIST_SET_FLAG (clist, CLIST_USE_DRAG_ICONS);
- clist->row_mem_chunk = NULL;
- clist->cell_mem_chunk = NULL;
-
clist->freeze_count = 0;
clist->rows = 0;
construct_properties);
GtkCList *clist = GTK_CLIST (object);
- /* initalize memory chunks, if this has not been done by any
- * possibly derived widget
- */
- if (!clist->row_mem_chunk)
- clist->row_mem_chunk = g_mem_chunk_new ("clist row mem chunk",
- sizeof (GtkCListRow),
- sizeof (GtkCListRow) *
- CLIST_OPTIMUM_SIZE,
- G_ALLOC_AND_FREE);
-
- if (!clist->cell_mem_chunk)
- clist->cell_mem_chunk = g_mem_chunk_new ("clist cell mem chunk",
- sizeof (GtkCell) * clist->columns,
- sizeof (GtkCell) * clist->columns *
- CLIST_OPTIMUM_SIZE,
- G_ALLOC_AND_FREE);
-
/* allocate memory for columns */
clist->column = columns_new (clist);
if (clist->hadjustment)
{
- gtk_object_ref (GTK_OBJECT (clist->hadjustment));
- gtk_object_sink (GTK_OBJECT (clist->hadjustment));
+ g_object_ref_sink (clist->hadjustment);
gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "changed",
(GtkSignalFunc) hadjustment_changed,
if (clist->vadjustment)
{
- gtk_object_ref (GTK_OBJECT (clist->vadjustment));
- gtk_object_sink (GTK_OBJECT (clist->vadjustment));
+ g_object_ref_sink (clist->vadjustment);
gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "changed",
(GtkSignalFunc) vadjustment_changed,
GtkSelectionMode mode)
{
g_return_if_fail (GTK_IS_CLIST (clist));
+ g_return_if_fail (mode != GTK_SELECTION_NONE);
if (mode == clist->selection_mode)
return;
switch (mode)
{
case GTK_SELECTION_MULTIPLE:
- case GTK_SELECTION_EXTENDED:
return;
case GTK_SELECTION_BROWSE:
case GTK_SELECTION_SINGLE:
gtk_clist_unselect_all (clist);
break;
+ default:
+ /* Someone set it by hand */
+ g_assert_not_reached ();
}
}
return NULL;
if (clist->column[column].button)
- return GTK_BUTTON (clist->column[column].button)->child;
+ return GTK_BIN (clist->column[column].button)->child;
return NULL;
}
GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
gtk_grab_remove (GTK_WIDGET (clist));
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (clist)),
+ GDK_CURRENT_TIME);
clist->drag_pos = -1;
if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1)
old_mask = GTK_CELL_PIXTEXT (clist_row->cell[column])->mask;
break;
case GTK_CELL_WIDGET:
- /* unimplimented */
+ /* unimplemented */
break;
default:
break;
switch (clist_row->cell[column].type)
{
case GTK_CELL_PIXTEXT:
+ gdk_window_get_size (GTK_CELL_PIXTEXT (clist_row->cell[column])->pixmap,
+ &width, &height);
+ requisition->width += width;
+ requisition->height = MAX (requisition->height, height);
+ break;
case GTK_CELL_PIXMAP:
gdk_window_get_size (GTK_CELL_PIXMAP (clist_row->cell[column])->pixmap,
&width, &height);
real_remove_row (GtkCList *clist,
gint row)
{
- gint was_visible, was_selected;
+ gint was_visible;
GList *list;
GtkCListRow *clist_row;
return;
was_visible = (gtk_clist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE);
- was_selected = 0;
/* get the row we're going to delete */
list = ROW_ELEMENT (clist, row);
clist->row_list_end = g_list_previous (list);
g_list_remove (list, clist_row);
- /*if (clist->focus_row >=0 &&
- (row <= clist->focus_row || clist->focus_row >= clist->rows))
- clist->focus_row--;*/
-
if (row < ROW_FROM_YPIXEL (clist, 0))
clist->voffset += clist->row_height + CELL_SPACING;
if (widget->style->font_desc)
{
PangoContext *context = gtk_widget_get_pango_context (widget);
- PangoFontMetrics metrics;
+ PangoFontMetrics *metrics;
- pango_context_get_metrics (context,
- widget->style->font_desc,
- pango_context_get_language (context),
- &metrics);
+ metrics = pango_context_get_metrics (context,
+ widget->style->font_desc,
+ pango_context_get_language (context));
if (!GTK_CLIST_ROW_HEIGHT_SET(clist))
- clist->row_height = PANGO_PIXELS (metrics.ascent + metrics.descent);
+ {
+ clist->row_height = (pango_font_metrics_get_ascent (metrics) +
+ pango_font_metrics_get_descent (metrics));
+ clist->row_height = PANGO_PIXELS (clist->row_height);
+ }
+
+ pango_font_metrics_unref (metrics);
}
CLIST_REFRESH (clist);
}
void
-gtk_clist_set_foreground (GtkCList *clist,
- gint row,
- GdkColor *color)
+gtk_clist_set_foreground (GtkCList *clist,
+ gint row,
+ const GdkColor *color)
{
GtkCListRow *clist_row;
}
void
-gtk_clist_set_background (GtkCList *clist,
- gint row,
- GdkColor *color)
+gtk_clist_set_background (GtkCList *clist,
+ gint row,
+ const GdkColor *color)
{
GtkCListRow *clist_row;
{
if (GTK_WIDGET_REALIZED (clist))
gtk_style_detach (clist_row->cell[column].style);
- gtk_style_unref (clist_row->cell[column].style);
+ g_object_unref (clist_row->cell[column].style);
}
clist_row->cell[column].style = style;
if (clist_row->cell[column].style)
{
- gtk_style_ref (clist_row->cell[column].style);
+ g_object_ref (clist_row->cell[column].style);
if (GTK_WIDGET_REALIZED (clist))
clist_row->cell[column].style =
{
if (GTK_WIDGET_REALIZED (clist))
gtk_style_detach (clist_row->style);
- gtk_style_unref (clist_row->style);
+ g_object_unref (clist_row->style);
}
clist_row->style = style;
if (clist_row->style)
{
- gtk_style_ref (clist_row->style);
+ g_object_ref (clist_row->style);
if (GTK_WIDGET_REALIZED (clist))
clist_row->style = gtk_style_attach (clist_row->style,
if (!selectable && clist_row->state == GTK_STATE_SELECTED)
{
if (clist->anchor >= 0 &&
- clist->selection_mode == GTK_SELECTION_EXTENDED)
+ clist->selection_mode == GTK_SELECTION_MULTIPLE)
{
clist->drag_button = 0;
remove_grab (clist);
{
g_return_if_fail (GTK_IS_CLIST (clist));
- if (clist->selection_mode == GTK_SELECTION_EXTENDED &&
+ if (clist->selection_mode == GTK_SELECTION_MULTIPLE &&
(clist->undo_selection || clist->undo_unselection))
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[UNDO_SELECTION]);
}
switch (clist->selection_mode)
{
- case GTK_SELECTION_EXTENDED:
case GTK_SELECTION_MULTIPLE:
case GTK_SELECTION_SINGLE:
clist_row = ROW_ELEMENT (clist, row)->data;
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[SELECT_ROW],
row, column, event);
break;
+ default:
+ g_assert_not_reached ();
}
}
GTK_CLIST_ROW (work));
}
+static gboolean
+clist_has_grab (GtkCList *clist)
+{
+ return (GTK_WIDGET_HAS_GRAB (clist) &&
+ gdk_display_pointer_is_grabbed (gtk_widget_get_display (GTK_WIDGET (clist))));
+}
+
static void
toggle_focus_row (GtkCList *clist)
{
g_return_if_fail (clist != 0);
g_return_if_fail (GTK_IS_CLIST (clist));
- if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
+ if (clist_has_grab (clist) ||
clist->focus_row < 0 || clist->focus_row >= clist->rows)
return;
switch (clist->selection_mode)
{
case GTK_SELECTION_SINGLE:
- case GTK_SELECTION_MULTIPLE:
toggle_row (clist, clist->focus_row, 0, NULL);
break;
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
g_list_free (clist->undo_selection);
g_list_free (clist->undo_unselection);
clist->undo_selection = NULL;
g_return_if_fail (clist != 0);
g_return_if_fail (GTK_IS_CLIST (clist));
- if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
- clist->selection_mode != GTK_SELECTION_EXTENDED)
+ if (clist_has_grab (clist) ||
+ clist->selection_mode != GTK_SELECTION_MULTIPLE)
return;
gtk_clist_draw_focus (GTK_WIDGET (clist));
static void
real_select_all (GtkCList *clist)
{
- GList *list;
- gint i;
-
g_return_if_fail (GTK_IS_CLIST (clist));
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
return;
switch (clist->selection_mode)
case GTK_SELECTION_BROWSE:
return;
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
g_list_free (clist->undo_selection);
g_list_free (clist->undo_unselection);
clist->undo_selection = NULL;
update_extended_selection (clist, clist->rows);
GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
return;
-
- case GTK_SELECTION_MULTIPLE:
- for (i = 0, list = clist->row_list; list; i++, list = list->next)
- {
- if (((GtkCListRow *)(list->data))->state == GTK_STATE_NORMAL)
- gtk_signal_emit (GTK_OBJECT (clist), clist_signals[SELECT_ROW],
- i, -1, NULL);
- }
- return;
+ default:
+ g_assert_not_reached ();
}
}
g_return_if_fail (GTK_IS_CLIST (clist));
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
return;
switch (clist->selection_mode)
return;
}
break;
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
g_list_free (clist->undo_selection);
g_list_free (clist->undo_unselection);
clist->undo_selection = NULL;
g_return_if_fail (GTK_IS_CLIST (clist));
- if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
- clist->selection_mode != GTK_SELECTION_EXTENDED)
+ if (clist_has_grab (clist) ||
+ clist->selection_mode != GTK_SELECTION_MULTIPLE)
return;
GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
{
g_return_if_fail (GTK_IS_CLIST (clist));
- if (clist->selection_mode != GTK_SELECTION_EXTENDED || clist->anchor >= 0)
+ if (clist->selection_mode != GTK_SELECTION_MULTIPLE || clist->anchor >= 0)
return;
g_list_free (clist->undo_selection);
GList *list;
GtkCListRow *clist_row;
- if (clist->selection_mode != GTK_SELECTION_EXTENDED)
+ if (clist->selection_mode != GTK_SELECTION_MULTIPLE)
return;
if (clist->anchor < 0 || clist->drag_pos < 0)
gint h2 = 0;
gint top;
- if (clist->selection_mode != GTK_SELECTION_EXTENDED || clist->anchor == -1)
+ if (clist->selection_mode != GTK_SELECTION_MULTIPLE || clist->anchor == -1)
return;
if (row < 0)
{
g_return_if_fail (GTK_IS_CLIST (clist));
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
return;
set_anchor (clist, GTK_CLIST_ADD_MODE(clist), clist->focus_row,
{
g_return_if_fail (GTK_IS_CLIST (clist));
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_FOCUS(clist))
+ if (gdk_display_pointer_is_grabbed (gtk_widget_get_display (GTK_WIDGET (clist))) &&
+ GTK_WIDGET_HAS_FOCUS (clist))
return;
GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
{
g_return_if_fail (GTK_IS_CLIST (clist));
- if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
- clist->selection_mode != GTK_SELECTION_EXTENDED)
+ if (clist_has_grab (clist) ||
+ clist->selection_mode != GTK_SELECTION_MULTIPLE)
return;
if (auto_start_selection)
clist->focus_row += d;
if (clist->focus_row == -1 && clist->rows >= 1)
clist->focus_row = 0;
- else if (clist->focus_row >= clist->rows)
+ else if (d < 0 && clist->focus_row >= clist->rows - 1)
+ clist->focus_row = clist->rows - 2;
+ else if (clist->focus_row >= clist->rows) /* Paranoia */
clist->focus_row = clist->rows - 1;
}
columns_delete (clist);
- g_mem_chunk_destroy (clist->cell_mem_chunk);
- g_mem_chunk_destroy (clist->row_mem_chunk);
-
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK);
attributes_mask = GDK_WA_CURSOR;
- attributes.cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW);
+ attributes.cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
+ GDK_SB_H_DOUBLE_ARROW);
clist->cursor_drag = attributes.cursor;
attributes.x = LIST_WIDTH (clist) + 1;
{
GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
{
remove_grab (clist);
(clist, g_list_nth (clist->row_list,
clist->drag_highlight_row)->data,
clist->drag_highlight_row, clist->drag_highlight_pos);
+
+ if (event->window == clist->title_window)
+ {
+ gint i;
+
+ for (i = 0; i < clist->columns; i++)
+ {
+ if (clist->column[i].button)
+ gtk_container_propagate_expose (GTK_CONTAINER (clist),
+ clist->column[i].button,
+ event);
+ }
+ }
}
return FALSE;
switch (clist->selection_mode)
{
case GTK_SELECTION_SINGLE:
- case GTK_SELECTION_MULTIPLE:
if (event->type != GDK_BUTTON_PRESS)
{
gtk_signal_emit (GTK_OBJECT (clist),
clist_signals[SELECT_ROW],
row, column, event);
break;
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
if (event->type != GDK_BUTTON_PRESS)
{
if (clist->anchor != -1)
GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
gtk_widget_get_pointer (widget, &x, NULL);
gtk_grab_remove (widget);
- gdk_pointer_ungrab (event->time);
+ gdk_display_pointer_ungrab (gtk_widget_get_display (widget), event->time);
if (clist->x_drag >= 0)
draw_xor_line (clist);
{
switch (clist->selection_mode)
{
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
if (!(event->state & GDK_SHIFT_MASK) ||
!GTK_WIDGET_CAN_FOCUS (widget) ||
event->x < 0 || event->x >= clist->clist_window_width ||
(clist, (GdkEvent *) event);
break;
case GTK_SELECTION_SINGLE:
- case GTK_SELECTION_MULTIPLE:
if (get_selection_info (clist, event->x, event->y,
&row, &column))
{
g_return_val_if_fail (GTK_IS_CLIST (widget), FALSE);
clist = GTK_CLIST (widget);
- if (!(gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)))
+ if (!clist_has_grab (clist))
return FALSE;
if (clist->drag_button > 0)
if (clist->htimer)
return FALSE;
- clist->htimer = gtk_timeout_add
- (SCROLL_TIME, (GtkFunction) horizontal_timeout, clist);
+ clist->htimer = gdk_threads_add_timeout
+ (SCROLL_TIME, (GSourceFunc) horizontal_timeout, clist);
if (!((x < 0 && clist->hadjustment->value == 0) ||
(x >= clist->clist_window_width &&
if (clist->vtimer)
return FALSE;
- clist->vtimer = gtk_timeout_add (SCROLL_TIME,
- (GtkFunction) vertical_timeout, clist);
+ clist->vtimer = gdk_threads_add_timeout (SCROLL_TIME,
+ (GSourceFunc) vertical_timeout, clist);
if (clist->drag_button &&
((y < 0 && clist->focus_row == 0) ||
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[SELECT_ROW],
clist->focus_row, -1, event);
break;
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
update_extended_selection (clist, clist->focus_row);
break;
default:
if (gdk_rectangle_intersect (area, &cell_rectangle,
&intersect_rectangle))
gdk_draw_rectangle (clist->clist_window,
- widget->style->base_gc[GTK_STATE_ACTIVE],
+ widget->style->base_gc[GTK_STATE_NORMAL],
TRUE,
intersect_rectangle.x,
intersect_rectangle.y,
if (gdk_rectangle_intersect (area, &cell_rectangle,
&intersect_rectangle))
gdk_draw_rectangle (clist->clist_window,
- widget->style->base_gc[GTK_STATE_ACTIVE],
+ widget->style->base_gc[GTK_STATE_NORMAL],
TRUE,
intersect_rectangle.x,
intersect_rectangle.y,
{
rect = &clip_rectangle;
gdk_draw_rectangle (clist->clist_window,
- widget->style->base_gc[GTK_STATE_ACTIVE],
+ widget->style->base_gc[GTK_STATE_NORMAL],
TRUE,
cell_rectangle.x,
cell_rectangle.y,
cell_rectangle.y += clist->row_height + CELL_SPACING;
gdk_draw_rectangle (clist->clist_window,
- widget->style->base_gc[GTK_STATE_ACTIVE],
+ widget->style->base_gc[GTK_STATE_NORMAL],
TRUE,
cell_rectangle.x,
cell_rectangle.y,
case GTK_CELL_TEXT:
if (layout)
{
- gint row_center_offset = 1.5 + (clist->row_height - logical_rect.height - 1) / 2;
+ gint row_center_offset = (clist->row_height - logical_rect.height - 1) / 2;
gdk_gc_set_clip_rectangle (fg_gc, &clip_rectangle);
gdk_draw_layout (clist->clist_window, fg_gc,
if (clist->vadjustment)
{
clist->vadjustment->page_size = clist->clist_window_height;
- clist->vadjustment->page_increment = clist->clist_window_height / 2;
clist->vadjustment->step_increment = clist->row_height;
+ clist->vadjustment->page_increment =
+ MAX (clist->vadjustment->page_size - clist->vadjustment->step_increment,
+ clist->vadjustment->page_size / 2);
clist->vadjustment->lower = 0;
clist->vadjustment->upper = LIST_HEIGHT (clist);
if (clist->hadjustment)
{
clist->hadjustment->page_size = clist->clist_window_width;
- clist->hadjustment->page_increment = clist->clist_window_width / 2;
clist->hadjustment->step_increment = 10;
+ clist->hadjustment->page_increment =
+ MAX (clist->hadjustment->page_size - clist->hadjustment->step_increment,
+ clist->hadjustment->page_size / 2);
clist->hadjustment->lower = 0;
clist->hadjustment->upper = LIST_WIDTH (clist);
return;
}
+typedef struct
+{
+ GdkWindow *window;
+ gint dx;
+} ScrollData;
+
+/* The window to which widget->window is relative */
+#define ALLOCATION_WINDOW(widget) \
+ (GTK_WIDGET_NO_WINDOW (widget) ? \
+ (widget)->window : \
+ gdk_window_get_parent ((widget)->window))
+
+static void
+adjust_allocation_recurse (GtkWidget *widget,
+ gpointer data)
+{
+ ScrollData *scroll_data = data;
+
+ if (!GTK_WIDGET_REALIZED (widget))
+ {
+ if (GTK_WIDGET_VISIBLE (widget))
+ {
+ GdkRectangle tmp_rectangle = widget->allocation;
+ tmp_rectangle.x += scroll_data->dx;
+
+ gtk_widget_size_allocate (widget, &tmp_rectangle);
+ }
+ }
+ else
+ {
+ if (ALLOCATION_WINDOW (widget) == scroll_data->window)
+ {
+ widget->allocation.x += scroll_data->dx;
+
+ if (GTK_IS_CONTAINER (widget))
+ gtk_container_forall (GTK_CONTAINER (widget),
+ adjust_allocation_recurse,
+ data);
+ }
+ }
+}
+
+static void
+adjust_allocation (GtkWidget *widget,
+ gint dx)
+{
+ ScrollData scroll_data;
+
+ if (GTK_WIDGET_REALIZED (widget))
+ scroll_data.window = ALLOCATION_WINDOW (widget);
+ else
+ scroll_data.window = NULL;
+
+ scroll_data.dx = dx;
+
+ adjust_allocation_recurse (widget, &scroll_data);
+}
+
static void
hadjustment_value_changed (GtkAdjustment *adjustment,
gpointer data)
dx = -value - clist->hoffset;
if (GTK_WIDGET_REALIZED (clist))
- {
- /* move the column buttons and resize windows */
- for (i = (dx<0)? 0 : clist->columns-1; i >= 0 && i < clist->columns; i += (dx<0)? 1 : -1)
- {
- if (clist->column[i].button)
- {
- clist->column[i].button->allocation.x -= value + clist->hoffset;
-
- if (clist->column[i].button->window)
- {
- gdk_window_move (clist->column[i].button->window,
- clist->column[i].button->allocation.x,
- clist->column[i].button->allocation.y);
-
- if (clist->column[i].window)
- gdk_window_move (clist->column[i].window,
- clist->column[i].button->allocation.x +
- clist->column[i].button->allocation.width -
- (DRAG_WIDTH / 2), 0);
- }
- }
- }
- }
+ gdk_window_scroll (clist->title_window, dx, 0);
- clist->hoffset = -value;
+ /* adjust the column button's allocations */
+ for (i = 0; i < clist->columns; i++)
+ if (clist->column[i].button)
+ adjust_allocation (clist->column[i].button, dx);
+ clist->hoffset = -value;
if (GTK_WIDGET_DRAWABLE (clist))
{
int i;
GtkCListRow *clist_row;
- clist_row = g_chunk_new (GtkCListRow, clist->row_mem_chunk);
- clist_row->cell = g_chunk_new (GtkCell, clist->cell_mem_chunk);
+ clist_row = g_slice_new (GtkCListRow);
+ clist_row->cell = g_slice_alloc (sizeof (GtkCell) * clist->columns);
for (i = 0; i < clist->columns; i++)
{
{
if (GTK_WIDGET_REALIZED (clist))
gtk_style_detach (clist_row->cell[i].style);
- gtk_style_unref (clist_row->cell[i].style);
+ g_object_unref (clist_row->cell[i].style);
}
}
{
if (GTK_WIDGET_REALIZED (clist))
gtk_style_detach (clist_row->style);
- gtk_style_unref (clist_row->style);
+ g_object_unref (clist_row->style);
}
if (clist_row->destroy)
clist_row->destroy (clist_row->data);
- g_mem_chunk_free (clist->cell_mem_chunk, clist_row->cell);
- g_mem_chunk_free (clist->row_mem_chunk, clist_row);
+ g_slice_free1 (sizeof (GtkCell) * clist->columns, clist_row->cell);
+ g_slice_free (GtkCListRow, clist_row);
}
/* FOCUS FUNCTIONS
clist->focus_row = 0;
if ((clist->selection_mode == GTK_SELECTION_BROWSE ||
- clist->selection_mode == GTK_SELECTION_EXTENDED) &&
+ clist->selection_mode == GTK_SELECTION_MULTIPLE) &&
!clist->selection)
gtk_signal_emit (GTK_OBJECT (clist),
clist_signals[SELECT_ROW],
gtk_clist_focus_in (GtkWidget *widget,
GdkEventFocus *event)
{
- GtkCList *clist;
-
- g_return_val_if_fail (GTK_IS_CLIST (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
-
- clist = GTK_CLIST (widget);
+ GtkCList *clist = GTK_CLIST (widget);
if (clist->selection_mode == GTK_SELECTION_BROWSE &&
clist->selection == NULL && clist->focus_row > -1)
gtk_clist_focus_out (GtkWidget *widget,
GdkEventFocus *event)
{
- GtkCList *clist;
-
- g_return_val_if_fail (GTK_IS_CLIST (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
+ GtkCList *clist = GTK_CLIST (widget);
gtk_clist_draw_focus (widget);
- clist = GTK_CLIST (widget);
-
GTK_CLIST_GET_CLASS (widget)->resync_selection (clist, (GdkEvent *) event);
return FALSE;
gint i;
gint left, right;
+ if (!GTK_CLIST_SHOW_TITLES (clist))
+ return FALSE;
+
/* Check last focused column */
if (clist->focus_header_column != -1)
{
g_return_if_fail (clist != 0);
g_return_if_fail (GTK_IS_CLIST (clist));
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
return;
for (last_column = clist->columns - 1;
g_return_if_fail (GTK_IS_CLIST (clist));
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
return;
switch (clist->selection_mode)
{
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
if (clist->anchor >= 0)
return;
case GTK_SELECTION_BROWSE:
{
case GTK_VISIBILITY_NONE:
if (old_focus_row != clist->focus_row &&
- !(clist->selection_mode == GTK_SELECTION_EXTENDED &&
+ !(clist->selection_mode == GTK_SELECTION_MULTIPLE &&
GTK_CLIST_ADD_MODE(clist)))
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[SELECT_ROW],
clist->focus_row, -1, NULL);
}
default:
if (old_focus_row != clist->focus_row &&
- !(clist->selection_mode == GTK_SELECTION_EXTENDED &&
+ !(clist->selection_mode == GTK_SELECTION_MULTIPLE &&
GTK_CLIST_ADD_MODE(clist)))
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[SELECT_ROW],
clist->focus_row, -1, NULL);
gtk_adjustment_set_value (clist->vadjustment, value);
}
-static gint
-horizontal_timeout (GtkCList *clist)
+static void
+do_fake_motion (GtkWidget *widget)
{
- GdkEventMotion event;
+ GdkEvent *event = gdk_event_new (GDK_MOTION_NOTIFY);
- memset (&event, 0, sizeof (event));
+ event->motion.send_event = TRUE;
- GDK_THREADS_ENTER ();
+ gtk_clist_motion (widget, (GdkEventMotion *)event);
+ gdk_event_free (event);
+}
+static gint
+horizontal_timeout (GtkCList *clist)
+{
clist->htimer = 0;
+ do_fake_motion (GTK_WIDGET (clist));
- event.type = GDK_MOTION_NOTIFY;
- event.send_event = TRUE;
-
- gtk_clist_motion (GTK_WIDGET (clist), &event);
-
- GDK_THREADS_LEAVE ();
-
return FALSE;
}
static gint
vertical_timeout (GtkCList *clist)
{
- GdkEventMotion event;
-
- memset (&event, 0, sizeof (event));
-
- GDK_THREADS_ENTER ();
-
clist->vtimer = 0;
-
- event.type = GDK_MOTION_NOTIFY;
- event.send_event = TRUE;
-
- gtk_clist_motion (GTK_WIDGET (clist), &event);
-
- GDK_THREADS_LEAVE ();
+ do_fake_motion (GTK_WIDGET (clist));
return FALSE;
}
static void
remove_grab (GtkCList *clist)
{
+ GtkWidget *widget = GTK_WIDGET (clist);
+
if (GTK_WIDGET_HAS_GRAB (clist))
{
- gtk_grab_remove (GTK_WIDGET (clist));
- if (gdk_pointer_is_grabbed ())
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ GdkDisplay *display = gtk_widget_get_display (widget);
+
+ gtk_grab_remove (widget);
+ if (gdk_display_pointer_is_grabbed (display))
+ gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
}
if (clist->htimer)
{
- gtk_timeout_remove (clist->htimer);
+ g_source_remove (clist->htimer);
clist->htimer = 0;
}
if (clist->vtimer)
{
- gtk_timeout_remove (clist->vtimer);
+ g_source_remove (clist->vtimer);
clist->vtimer = 0;
}
}
if (clist->rows <= 1)
return;
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (clist_has_grab (clist))
return;
gtk_clist_freeze (clist);
- if (clist->anchor != -1 && clist->selection_mode == GTK_SELECTION_EXTENDED)
+ if (clist->anchor != -1 && clist->selection_mode == GTK_SELECTION_MULTIPLE)
{
GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
g_list_free (clist->undo_selection);
switch (clist->selection_mode)
{
- case GTK_SELECTION_EXTENDED:
+ case GTK_SELECTION_MULTIPLE:
update_extended_selection (clist, clist->focus_row);
GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
break;
case GTK_SELECTION_SINGLE:
- case GTK_SELECTION_MULTIPLE:
clist->anchor = -1;
case GTK_SELECTION_BROWSE:
break;
+ default:
+ g_assert_not_reached ();
}
info = g_dataset_get_data (context, "gtk-clist-drag-source");
gtk_drag_get_source_widget (context) == widget)
{
GList *list;
- GdkAtom atom = gdk_atom_intern ("gtk-clist-drag-reorder", FALSE);
+ GdkAtom atom = gdk_atom_intern_static_string ("gtk-clist-drag-reorder");
list = context->targets;
while (list)
{
- if (atom == GPOINTER_TO_INT (list->data))
+ if (atom == GDK_POINTER_TO_ATOM (list->data))
{
GTK_CLIST_GET_CLASS (clist)->draw_drag_highlight
(clist,
if (GTK_CLIST_REORDERABLE (clist))
{
GList *list;
- GdkAtom atom = gdk_atom_intern ("gtk-clist-drag-reorder", FALSE);
+ GdkAtom atom = gdk_atom_intern_static_string ("gtk-clist-drag-reorder");
list = context->targets;
while (list)
{
- if (atom == GPOINTER_TO_INT (list->data))
+ if (atom == GDK_POINTER_TO_ATOM (list->data))
break;
list = list->next;
}
gtk_drag_get_source_widget (context) == widget)
{
GList *list;
- GdkAtom atom = gdk_atom_intern ("gtk-clist-drag-reorder", FALSE);
+ GdkAtom atom = gdk_atom_intern_static_string ("gtk-clist-drag-reorder");
list = context->targets;
while (list)
{
- if (atom == GPOINTER_TO_INT (list->data))
+ if (atom == GDK_POINTER_TO_ATOM (list->data))
return TRUE;
list = list->next;
}
if (GTK_CLIST_REORDERABLE (clist) &&
gtk_drag_get_source_widget (context) == widget &&
selection_data->target ==
- gdk_atom_intern ("gtk-clist-drag-reorder", FALSE) &&
- selection_data->format == GTK_TYPE_POINTER &&
+ gdk_atom_intern_static_string ("gtk-clist-drag-reorder") &&
+ selection_data->format == 8 &&
selection_data->length == sizeof (GtkCListCellInfo))
{
GtkCListCellInfo *source_info;
g_return_if_fail (context != NULL);
g_return_if_fail (selection_data != NULL);
- if (selection_data->target ==
- gdk_atom_intern ("gtk-clist-drag-reorder", FALSE))
+ if (selection_data->target == gdk_atom_intern_static_string ("gtk-clist-drag-reorder"))
{
GtkCListCellInfo *info;
ret_info.column = info->column;
gtk_selection_data_set (selection_data, selection_data->target,
- GTK_TYPE_POINTER, (guchar *) &ret_info,
+ 8, (guchar *) &ret_info,
sizeof (GtkCListCellInfo));
}
- else
- gtk_selection_data_set (selection_data, selection_data->target,
- GTK_TYPE_POINTER, NULL, 0);
}
}
if (button < MAX_BUTTON)
{
- if (gdk_pointer_is_grabbed () || GTK_WIDGET_HAS_GRAB (clist))
+ if (gdk_display_pointer_is_grabbed (gtk_widget_get_display (GTK_WIDGET (clist))) ||
+ GTK_WIDGET_HAS_GRAB (clist))
{
remove_grab (clist);
clist->drag_button = 0;
clist->button_actions[button] = button_actions;
}
}
+
+#define __GTK_CLIST_C__
+#include "gtkaliasdef.c"
+