Use GtkTreeViewRowSeparatorFunc instead of GtkCellRendererSepText.
Sat Aug 7 18:19:03 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkfilechooserdefault.c (save_folder_combo_create): (shortcuts_list_create): Use GtkTreeViewRowSeparatorFunc instead of GtkCellRendererSepText. (#147864) * gtk/gtkcellrendererseptext.[hc]: Removed. * gtk/Makefile.am: Remove gtkcellrendererseptext.[hc] Sat Aug 7 18:15:15 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkcombobox.c (gtk_combo_box_menu_row_deleted): (gtk_combo_box_menu_row_inserted): (gtk_combo_box_menu_row_changed): Correctly handle insertion and deletion of separators in menu mode.
This commit is contained in:
committed by
Matthias Clasen
parent
5f7fbb27c2
commit
f82ca65b81
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
Sat Aug 7 18:19:03 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (save_folder_combo_create):
|
||||||
|
(shortcuts_list_create): Use GtkTreeViewRowSeparatorFunc
|
||||||
|
instead of GtkCellRendererSepText. (#147864)
|
||||||
|
|
||||||
|
* gtk/gtkcellrendererseptext.[hc]: Removed.
|
||||||
|
|
||||||
|
* gtk/Makefile.am: Remove gtkcellrendererseptext.[hc]
|
||||||
|
|
||||||
|
Sat Aug 7 18:15:15 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkcombobox.c (gtk_combo_box_menu_row_deleted):
|
||||||
|
(gtk_combo_box_menu_row_inserted):
|
||||||
|
(gtk_combo_box_menu_row_changed): Correctly handle
|
||||||
|
insertion and deletion of separators in menu mode.
|
||||||
|
|
||||||
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
||||||
|
|||||||
@ -1,3 +1,20 @@
|
|||||||
|
Sat Aug 7 18:19:03 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (save_folder_combo_create):
|
||||||
|
(shortcuts_list_create): Use GtkTreeViewRowSeparatorFunc
|
||||||
|
instead of GtkCellRendererSepText. (#147864)
|
||||||
|
|
||||||
|
* gtk/gtkcellrendererseptext.[hc]: Removed.
|
||||||
|
|
||||||
|
* gtk/Makefile.am: Remove gtkcellrendererseptext.[hc]
|
||||||
|
|
||||||
|
Sat Aug 7 18:15:15 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkcombobox.c (gtk_combo_box_menu_row_deleted):
|
||||||
|
(gtk_combo_box_menu_row_inserted):
|
||||||
|
(gtk_combo_box_menu_row_changed): Correctly handle
|
||||||
|
insertion and deletion of separators in menu mode.
|
||||||
|
|
||||||
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
||||||
|
|||||||
@ -1,3 +1,20 @@
|
|||||||
|
Sat Aug 7 18:19:03 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (save_folder_combo_create):
|
||||||
|
(shortcuts_list_create): Use GtkTreeViewRowSeparatorFunc
|
||||||
|
instead of GtkCellRendererSepText. (#147864)
|
||||||
|
|
||||||
|
* gtk/gtkcellrendererseptext.[hc]: Removed.
|
||||||
|
|
||||||
|
* gtk/Makefile.am: Remove gtkcellrendererseptext.[hc]
|
||||||
|
|
||||||
|
Sat Aug 7 18:15:15 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkcombobox.c (gtk_combo_box_menu_row_deleted):
|
||||||
|
(gtk_combo_box_menu_row_inserted):
|
||||||
|
(gtk_combo_box_menu_row_changed): Correctly handle
|
||||||
|
insertion and deletion of separators in menu mode.
|
||||||
|
|
||||||
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
||||||
|
|||||||
@ -1,3 +1,20 @@
|
|||||||
|
Sat Aug 7 18:19:03 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (save_folder_combo_create):
|
||||||
|
(shortcuts_list_create): Use GtkTreeViewRowSeparatorFunc
|
||||||
|
instead of GtkCellRendererSepText. (#147864)
|
||||||
|
|
||||||
|
* gtk/gtkcellrendererseptext.[hc]: Removed.
|
||||||
|
|
||||||
|
* gtk/Makefile.am: Remove gtkcellrendererseptext.[hc]
|
||||||
|
|
||||||
|
Sat Aug 7 18:15:15 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gtk/gtkcombobox.c (gtk_combo_box_menu_row_deleted):
|
||||||
|
(gtk_combo_box_menu_row_inserted):
|
||||||
|
(gtk_combo_box_menu_row_changed): Correctly handle
|
||||||
|
insertion and deletion of separators in menu mode.
|
||||||
|
|
||||||
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
2004-08-07 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
* gdk/win32/gdkevents-win32.c (handle_configure_event,
|
||||||
|
|||||||
@ -276,7 +276,6 @@ gtk_semi_private_h_sources = \
|
|||||||
|
|
||||||
# GTK+ header files that don't get installed
|
# GTK+ header files that don't get installed
|
||||||
gtk_private_h_sources = \
|
gtk_private_h_sources = \
|
||||||
gtkcellrendererseptext.h\
|
|
||||||
gtkentryprivate.h \
|
gtkentryprivate.h \
|
||||||
gtkfilechooserembed.h \
|
gtkfilechooserembed.h \
|
||||||
gtkfilechooserentry.h \
|
gtkfilechooserentry.h \
|
||||||
@ -327,7 +326,6 @@ gtk_c_sources = \
|
|||||||
gtkcellrenderercombo.c \
|
gtkcellrenderercombo.c \
|
||||||
gtkcellrendererpixbuf.c \
|
gtkcellrendererpixbuf.c \
|
||||||
gtkcellrendererprogress.c \
|
gtkcellrendererprogress.c \
|
||||||
gtkcellrendererseptext.c\
|
|
||||||
gtkcellrenderertext.c \
|
gtkcellrenderertext.c \
|
||||||
gtkcellrenderertoggle.c \
|
gtkcellrenderertoggle.c \
|
||||||
gtkcellview.c \
|
gtkcellview.c \
|
||||||
|
|||||||
@ -1,152 +0,0 @@
|
|||||||
/* GTK - The GIMP Toolkit
|
|
||||||
* gtkcellrendererseptext.h: Cell renderer for text or a separator
|
|
||||||
* Copyright (C) 2003, Ximian, Inc.
|
|
||||||
*
|
|
||||||
* Author: Federico Mena-Quintero <federico@ximian.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the
|
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
#include "gtkcellrendererseptext.h"
|
|
||||||
|
|
||||||
static void gtk_cell_renderer_sep_get_size (GtkCellRenderer *cell,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GdkRectangle *cell_area,
|
|
||||||
gint *x_offset,
|
|
||||||
gint *y_offset,
|
|
||||||
gint *width,
|
|
||||||
gint *height);
|
|
||||||
|
|
||||||
static void gtk_cell_renderer_sep_text_render (GtkCellRenderer *cell,
|
|
||||||
GdkWindow *window,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GdkRectangle *background_area,
|
|
||||||
GdkRectangle *cell_area,
|
|
||||||
GdkRectangle *expose_area,
|
|
||||||
GtkCellRendererState flags);
|
|
||||||
|
|
||||||
static GtkCellRendererTextClass *parent_class;
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_cell_renderer_sep_text_class_init (GtkCellRendererSepTextClass *class)
|
|
||||||
{
|
|
||||||
GtkCellRendererClass *cell_renderer_class;
|
|
||||||
|
|
||||||
cell_renderer_class = GTK_CELL_RENDERER_CLASS (class);
|
|
||||||
|
|
||||||
parent_class = g_type_class_peek_parent (class);
|
|
||||||
|
|
||||||
cell_renderer_class->get_size = gtk_cell_renderer_sep_get_size;
|
|
||||||
cell_renderer_class->render = gtk_cell_renderer_sep_text_render;
|
|
||||||
}
|
|
||||||
|
|
||||||
GType
|
|
||||||
_gtk_cell_renderer_sep_text_get_type (void)
|
|
||||||
{
|
|
||||||
static GType cell_type = 0;
|
|
||||||
|
|
||||||
if (!cell_type)
|
|
||||||
{
|
|
||||||
static const GTypeInfo cell_info =
|
|
||||||
{
|
|
||||||
sizeof (GtkCellRendererSepTextClass),
|
|
||||||
NULL, /* base_init */
|
|
||||||
NULL, /* base_finalize */
|
|
||||||
(GClassInitFunc) gtk_cell_renderer_sep_text_class_init,
|
|
||||||
NULL, /* class_finalize */
|
|
||||||
NULL, /* class_data */
|
|
||||||
sizeof (GtkCellRendererSepText),
|
|
||||||
0, /* n_preallocs */
|
|
||||||
NULL, /* instance_init */
|
|
||||||
NULL, /* value_table */
|
|
||||||
};
|
|
||||||
|
|
||||||
cell_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_TEXT, "GtkCellRendererSepText",
|
|
||||||
&cell_info, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return cell_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_cell_renderer_sep_get_size (GtkCellRenderer *cell,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GdkRectangle *cell_area,
|
|
||||||
gint *x_offset,
|
|
||||||
gint *y_offset,
|
|
||||||
gint *width,
|
|
||||||
gint *height)
|
|
||||||
{
|
|
||||||
GtkCellRendererSepText *st;
|
|
||||||
const char *text;
|
|
||||||
|
|
||||||
st = GTK_CELL_RENDERER_SEP_TEXT (cell);
|
|
||||||
|
|
||||||
text = st->renderer_text.text;
|
|
||||||
|
|
||||||
if (!text)
|
|
||||||
{
|
|
||||||
if (width)
|
|
||||||
*width = cell->xpad * 2 + 1;
|
|
||||||
|
|
||||||
if (height)
|
|
||||||
*height = cell->ypad * 2 + 1;
|
|
||||||
|
|
||||||
if (x_offset) *x_offset = 0;
|
|
||||||
if (y_offset) *y_offset = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GTK_CELL_RENDERER_CLASS (parent_class)->get_size (cell, widget, cell_area, x_offset, y_offset, width, height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_cell_renderer_sep_text_render (GtkCellRenderer *cell,
|
|
||||||
GdkWindow *window,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GdkRectangle *background_area,
|
|
||||||
GdkRectangle *cell_area,
|
|
||||||
GdkRectangle *expose_area,
|
|
||||||
GtkCellRendererState flags)
|
|
||||||
{
|
|
||||||
GtkCellRendererSepText *st;
|
|
||||||
const char *text;
|
|
||||||
|
|
||||||
st = GTK_CELL_RENDERER_SEP_TEXT (cell);
|
|
||||||
|
|
||||||
text = st->renderer_text.text;
|
|
||||||
|
|
||||||
if (!text)
|
|
||||||
gtk_paint_hline (gtk_widget_get_style (widget),
|
|
||||||
window,
|
|
||||||
GTK_WIDGET_STATE (widget),
|
|
||||||
expose_area,
|
|
||||||
widget,
|
|
||||||
NULL,
|
|
||||||
cell_area->x,
|
|
||||||
cell_area->x + cell_area->width,
|
|
||||||
cell_area->y + cell_area->height / 2);
|
|
||||||
else
|
|
||||||
GTK_CELL_RENDERER_CLASS (parent_class)->render (cell, window, widget, background_area, cell_area, expose_area, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkCellRenderer *
|
|
||||||
_gtk_cell_renderer_sep_text_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (GTK_TYPE_CELL_RENDERER_SEP_TEXT, NULL);
|
|
||||||
}
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
/* GTK - The GIMP Toolkit
|
|
||||||
* gtkcellrendererseptext.h: Cell renderer for text or a separator
|
|
||||||
* Copyright (C) 2003, Ximian, Inc.
|
|
||||||
*
|
|
||||||
* Author: Federico Mena-Quintero <federico@ximian.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the
|
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GTK_CELL_RENDERER_SEP_TEXT_H__
|
|
||||||
#define __GTK_CELL_RENDERER_SEP_TEXT_H__
|
|
||||||
|
|
||||||
#include <gtk/gtkcellrenderertext.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define GTK_TYPE_CELL_RENDERER_SEP_TEXT (_gtk_cell_renderer_sep_text_get_type ())
|
|
||||||
#define GTK_CELL_RENDERER_SEP_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_RENDERER_SEP_TEXT, GtkCellRendererSepText))
|
|
||||||
#define GTK_CELL_RENDERER_SEP_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_RENDERER_SEP_TEXT, GtkCellRendererSepTextClass))
|
|
||||||
#define GTK_IS_CELL_RENDERER_SEP_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_RENDERER_SEP_TEXT))
|
|
||||||
#define GTK_IS_CELL_RENDERER_SEP_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_RENDERER_SEP_TEXT))
|
|
||||||
#define GTK_CELL_RENDERER_SEP_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_RENDERER_SEP_TEXT, GtkCellRendererSepTextClass))
|
|
||||||
|
|
||||||
typedef struct _GtkCellRendererSepText GtkCellRendererSepText;
|
|
||||||
typedef struct _GtkCellRendererSepTextClass GtkCellRendererSepTextClass;
|
|
||||||
|
|
||||||
struct _GtkCellRendererSepText
|
|
||||||
{
|
|
||||||
GtkCellRendererText renderer_text;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GtkCellRendererSepTextClass
|
|
||||||
{
|
|
||||||
GtkCellRendererTextClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
GType _gtk_cell_renderer_sep_text_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
GtkCellRenderer *_gtk_cell_renderer_sep_text_new (void);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@ -2361,7 +2361,13 @@ gtk_combo_box_menu_fill_level (GtkComboBox *combo_box,
|
|||||||
is_separator = FALSE;
|
is_separator = FALSE;
|
||||||
|
|
||||||
if (is_separator)
|
if (is_separator)
|
||||||
item = gtk_separator_menu_item_new ();
|
{
|
||||||
|
item = gtk_separator_menu_item_new ();
|
||||||
|
g_object_set_data_full (G_OBJECT (item),
|
||||||
|
"gtk-combo-box-item-path",
|
||||||
|
gtk_tree_model_get_path (model, &iter),
|
||||||
|
(GDestroyNotify)gtk_tree_path_free);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
item = gtk_cell_view_menu_item_new (combo_box, model, &iter);
|
item = gtk_cell_view_menu_item_new (combo_box, model, &iter);
|
||||||
@ -2523,8 +2529,7 @@ static void
|
|||||||
gtk_combo_box_relayout (GtkComboBox *combo_box)
|
gtk_combo_box_relayout (GtkComboBox *combo_box)
|
||||||
{
|
{
|
||||||
GList *list, *j;
|
GList *list, *j;
|
||||||
GtkWidget *menu, *item;
|
GtkWidget *menu;
|
||||||
gint row, col, width;
|
|
||||||
|
|
||||||
menu = combo_box->priv->popup_widget;
|
menu = combo_box->priv->popup_widget;
|
||||||
|
|
||||||
@ -2726,7 +2731,11 @@ find_menu_by_path (GtkWidget *menu,
|
|||||||
item = NULL;
|
item = NULL;
|
||||||
for (i = list; i; i = i->next)
|
for (i = list; i; i = i->next)
|
||||||
{
|
{
|
||||||
if (GTK_IS_CELL_VIEW (GTK_BIN (i->data)->child))
|
if (GTK_IS_SEPARATOR_MENU_ITEM (i->data))
|
||||||
|
{
|
||||||
|
mpath = gtk_tree_path_copy (g_object_get_data (G_OBJECT (i->data), "gtk-combo-box-item-path"));
|
||||||
|
}
|
||||||
|
else if (GTK_IS_CELL_VIEW (GTK_BIN (i->data)->child))
|
||||||
{
|
{
|
||||||
if (skip)
|
if (skip)
|
||||||
{
|
{
|
||||||
@ -2735,32 +2744,35 @@ find_menu_by_path (GtkWidget *menu,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mpath = gtk_cell_view_get_displayed_row (GTK_CELL_VIEW (GTK_BIN (i->data)->child));
|
mpath = gtk_cell_view_get_displayed_row (GTK_CELL_VIEW (GTK_BIN (i->data)->child));
|
||||||
/* this case is necessary, since the row reference of
|
}
|
||||||
* the cell view may already be updated after a deletion
|
else
|
||||||
*/
|
continue;
|
||||||
if (!mpath)
|
|
||||||
{
|
/* this case is necessary, since the row reference of
|
||||||
item = i->data;
|
* the cell view may already be updated after a deletion
|
||||||
break;
|
*/
|
||||||
}
|
if (!mpath)
|
||||||
if (gtk_tree_path_compare (mpath, path) == 0)
|
{
|
||||||
|
item = i->data;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (gtk_tree_path_compare (mpath, path) == 0)
|
||||||
|
{
|
||||||
|
gtk_tree_path_free (mpath);
|
||||||
|
item = i->data;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (gtk_tree_path_is_ancestor (mpath, path))
|
||||||
|
{
|
||||||
|
submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (i->data));
|
||||||
|
if (submenu != NULL)
|
||||||
{
|
{
|
||||||
gtk_tree_path_free (mpath);
|
gtk_tree_path_free (mpath);
|
||||||
item = i->data;
|
item = find_menu_by_path (submenu, path, TRUE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (gtk_tree_path_is_ancestor (mpath, path))
|
|
||||||
{
|
|
||||||
submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (i->data));
|
|
||||||
if (submenu != NULL)
|
|
||||||
{
|
|
||||||
gtk_tree_path_free (mpath);
|
|
||||||
item = find_menu_by_path (submenu, path, TRUE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gtk_tree_path_free (mpath);
|
|
||||||
}
|
}
|
||||||
|
gtk_tree_path_free (mpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (list);
|
g_list_free (list);
|
||||||
@ -2808,6 +2820,7 @@ gtk_combo_box_menu_row_inserted (GtkTreeModel *model,
|
|||||||
GtkTreePath *ppath;
|
GtkTreePath *ppath;
|
||||||
GtkTreeIter piter;
|
GtkTreeIter piter;
|
||||||
gint depth, pos;
|
gint depth, pos;
|
||||||
|
gboolean is_separator;
|
||||||
|
|
||||||
if (!combo_box->priv->popup_widget)
|
if (!combo_box->priv->popup_widget)
|
||||||
return;
|
return;
|
||||||
@ -2854,13 +2867,30 @@ gtk_combo_box_menu_row_inserted (GtkTreeModel *model,
|
|||||||
pos += 1;
|
pos += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
item = gtk_cell_view_menu_item_new (combo_box, model, iter);
|
if (combo_box->priv->row_separator_func)
|
||||||
|
is_separator = (*combo_box->priv->row_separator_func) (model, iter,
|
||||||
|
combo_box->priv->row_separator_data);
|
||||||
|
else
|
||||||
|
is_separator = FALSE;
|
||||||
|
|
||||||
|
if (is_separator)
|
||||||
|
{
|
||||||
|
item = gtk_separator_menu_item_new ();
|
||||||
|
g_object_set_data_full (G_OBJECT (item),
|
||||||
|
"gtk-combo-box-item-path",
|
||||||
|
gtk_tree_path_copy (path),
|
||||||
|
(GDestroyNotify)gtk_tree_path_free);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item = gtk_cell_view_menu_item_new (combo_box, model, iter);
|
||||||
|
|
||||||
|
g_signal_connect (item, "activate",
|
||||||
|
G_CALLBACK (gtk_combo_box_menu_item_activate),
|
||||||
|
combo_box);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
|
|
||||||
g_signal_connect (item, "activate",
|
|
||||||
G_CALLBACK (gtk_combo_box_menu_item_activate),
|
|
||||||
combo_box);
|
|
||||||
|
|
||||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menu), item, pos);
|
gtk_menu_shell_insert (GTK_MENU_SHELL (menu), item, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2902,16 +2932,28 @@ gtk_combo_box_menu_row_changed (GtkTreeModel *model,
|
|||||||
GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
|
GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
|
||||||
GtkWidget *item;
|
GtkWidget *item;
|
||||||
gint width;
|
gint width;
|
||||||
|
gboolean is_separator;
|
||||||
|
|
||||||
if (!combo_box->priv->popup_widget)
|
if (!combo_box->priv->popup_widget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (combo_box->priv->wrap_width)
|
item = find_menu_by_path (combo_box->priv->popup_widget, path, FALSE);
|
||||||
|
|
||||||
|
if (combo_box->priv->row_separator_func)
|
||||||
|
is_separator = (*combo_box->priv->row_separator_func) (model, iter,
|
||||||
|
combo_box->priv->row_separator_data);
|
||||||
|
else
|
||||||
|
is_separator = FALSE;
|
||||||
|
|
||||||
|
if (is_separator != GTK_IS_SEPARATOR_MENU_ITEM (item))
|
||||||
{
|
{
|
||||||
item = find_menu_by_path (combo_box->priv->popup_widget, path, FALSE);
|
gtk_combo_box_menu_row_deleted (model, path, combo_box);
|
||||||
gtk_combo_box_relayout_item (combo_box, item, iter, NULL);
|
gtk_combo_box_menu_row_inserted (model, path, iter, combo_box);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (combo_box->priv->wrap_width)
|
||||||
|
gtk_combo_box_relayout_item (combo_box, item, iter, NULL);
|
||||||
|
|
||||||
width = gtk_combo_box_calc_requested_width (combo_box, path);
|
width = gtk_combo_box_calc_requested_width (combo_box, path);
|
||||||
|
|
||||||
if (width > combo_box->priv->width)
|
if (width > combo_box->priv->width)
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
#include "gtkbutton.h"
|
#include "gtkbutton.h"
|
||||||
#include "gtkcelllayout.h"
|
#include "gtkcelllayout.h"
|
||||||
#include "gtkcellrendererpixbuf.h"
|
#include "gtkcellrendererpixbuf.h"
|
||||||
#include "gtkcellrendererseptext.h"
|
#include "gtkcellrenderertext.h"
|
||||||
#include "gtkcellrenderertext.h"
|
#include "gtkcellrenderertext.h"
|
||||||
#include "gtkcheckmenuitem.h"
|
#include "gtkcheckmenuitem.h"
|
||||||
#include "gtkcombobox.h"
|
#include "gtkcombobox.h"
|
||||||
@ -2546,6 +2546,24 @@ shortcuts_selection_changed_cb (GtkTreeSelection *selection,
|
|||||||
bookmarks_check_remove_sensitivity (impl);
|
bookmarks_check_remove_sensitivity (impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
shortcuts_row_separator_func (GtkTreeModel *model,
|
||||||
|
GtkTreeIter *iter,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
gint column = GPOINTER_TO_INT (data);
|
||||||
|
gchar *text;
|
||||||
|
|
||||||
|
gtk_tree_model_get (model, iter, column, &text, -1);
|
||||||
|
|
||||||
|
if (!text)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
g_free (text);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Creates the widgets for the shortcuts and bookmarks tree */
|
/* Creates the widgets for the shortcuts and bookmarks tree */
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
shortcuts_list_create (GtkFileChooserDefault *impl)
|
shortcuts_list_create (GtkFileChooserDefault *impl)
|
||||||
@ -2630,12 +2648,17 @@ shortcuts_list_create (GtkFileChooserDefault *impl)
|
|||||||
"visible", SHORTCUTS_COL_PIXBUF_VISIBLE,
|
"visible", SHORTCUTS_COL_PIXBUF_VISIBLE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
renderer = _gtk_cell_renderer_sep_text_new ();
|
renderer = gtk_cell_renderer_text_new ();
|
||||||
gtk_tree_view_column_pack_start (column, renderer, TRUE);
|
gtk_tree_view_column_pack_start (column, renderer, TRUE);
|
||||||
gtk_tree_view_column_set_attributes (column, renderer,
|
gtk_tree_view_column_set_attributes (column, renderer,
|
||||||
"text", SHORTCUTS_COL_NAME,
|
"text", SHORTCUTS_COL_NAME,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view),
|
||||||
|
shortcuts_row_separator_func,
|
||||||
|
GINT_TO_POINTER (SHORTCUTS_COL_NAME),
|
||||||
|
NULL);
|
||||||
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), column);
|
gtk_tree_view_append_column (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), column);
|
||||||
|
|
||||||
return swin;
|
return swin;
|
||||||
@ -3094,13 +3117,18 @@ save_folder_combo_create (GtkFileChooserDefault *impl)
|
|||||||
"sensitive", SHORTCUTS_COL_PIXBUF_VISIBLE,
|
"sensitive", SHORTCUTS_COL_PIXBUF_VISIBLE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
cell = _gtk_cell_renderer_sep_text_new ();
|
cell = gtk_cell_renderer_text_new ();
|
||||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
|
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
|
||||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
|
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
|
||||||
"text", SHORTCUTS_COL_NAME,
|
"text", SHORTCUTS_COL_NAME,
|
||||||
"sensitive", SHORTCUTS_COL_PIXBUF_VISIBLE,
|
"sensitive", SHORTCUTS_COL_PIXBUF_VISIBLE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
|
||||||
|
shortcuts_row_separator_func,
|
||||||
|
GINT_TO_POINTER (SHORTCUTS_COL_NAME),
|
||||||
|
NULL);
|
||||||
|
|
||||||
g_signal_connect (combo, "changed",
|
g_signal_connect (combo, "changed",
|
||||||
G_CALLBACK (save_folder_combo_changed_cb), impl);
|
G_CALLBACK (save_folder_combo_changed_cb), impl);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user