mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-06 00:30:08 +00:00
Port the GtkRecentChooser default implementation widget to the new
2007-07-23 Emmanuele Bassi <ebassi@gnome.org> * gtk/gtkrecentchooserdefault.c: Port the GtkRecentChooser default implementation widget to the new tooltips API, and make it look like the GtkFileChooser widget in recent files mode (move the full path from the widget to a tooltip on the row) to improve consistency. * gtk/gtkrecentchoosermenu.c: Port the GtkRecentChooserMenu widget to the new tooltips API. * tests/testrecentchooser.c: * tests/testrecentchoosermenu.c: Exercise the tooltips code paths. svn path=/trunk/; revision=18526
This commit is contained in:
parent
afb43b2b1c
commit
cb388e4df8
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2007-07-23 Emmanuele Bassi <ebassi@gnome.org>
|
||||
|
||||
* gtk/gtkrecentchooserdefault.c: Port the GtkRecentChooser default
|
||||
implementation widget to the new tooltips API, and make it look
|
||||
like the GtkFileChooser widget in recent files mode (move the
|
||||
full path from the widget to a tooltip on the row) to improve
|
||||
consistency.
|
||||
|
||||
* gtk/gtkrecentchoosermenu.c: Port the GtkRecentChooserMenu widget
|
||||
to the new tooltips API.
|
||||
|
||||
* tests/testrecentchooser.c:
|
||||
* tests/testrecentchoosermenu.c: Exercise the tooltips code paths.
|
||||
|
||||
2007-07-22 Ross Burton <ross@openedhand.com>
|
||||
|
||||
* gtk/gtkscrolledwindow.c:
|
||||
|
@ -64,7 +64,7 @@
|
||||
#include "gtktreemodelfilter.h"
|
||||
#include "gtktreeselection.h"
|
||||
#include "gtktreestore.h"
|
||||
#include "gtktooltips.h"
|
||||
#include "gtktooltip.h"
|
||||
#include "gtktypebuiltins.h"
|
||||
#include "gtkvbox.h"
|
||||
|
||||
@ -111,8 +111,6 @@ struct _GtkRecentChooserDefault
|
||||
gpointer sort_data;
|
||||
GDestroyNotify sort_data_destroy;
|
||||
|
||||
GtkTooltips *tooltips;
|
||||
|
||||
GtkIconTheme *icon_theme;
|
||||
|
||||
GtkWidget *recent_view;
|
||||
@ -280,6 +278,14 @@ static void recent_view_drag_data_get_cb (GtkWidget *widget,
|
||||
guint info,
|
||||
guint32 time_,
|
||||
gpointer data);
|
||||
static gboolean recent_view_query_tooltip_cb (GtkWidget *widget,
|
||||
gint x,
|
||||
gint y,
|
||||
gboolean keyboard_tip,
|
||||
GtkTooltip *tooltip,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkRecentChooserDefault,
|
||||
_gtk_recent_chooser_default,
|
||||
@ -348,9 +354,6 @@ _gtk_recent_chooser_default_init (GtkRecentChooserDefault *impl)
|
||||
|
||||
impl->current_filter = NULL;
|
||||
|
||||
impl->tooltips = gtk_tooltips_new ();
|
||||
g_object_ref_sink (impl->tooltips);
|
||||
|
||||
impl->recent_items = NULL;
|
||||
impl->n_recent_items = 0;
|
||||
impl->loaded_items = 0;
|
||||
@ -400,6 +403,10 @@ gtk_recent_chooser_default_constructor (GType type,
|
||||
g_signal_connect (impl->recent_view, "drag_data_get",
|
||||
G_CALLBACK (recent_view_drag_data_get_cb), impl);
|
||||
|
||||
g_object_set (impl->recent_view, "has-tooltip", TRUE, NULL);
|
||||
g_signal_connect (impl->recent_view, "query-tooltip",
|
||||
G_CALLBACK (recent_view_query_tooltip_cb), impl);
|
||||
|
||||
g_object_set_data (G_OBJECT (impl->recent_view),
|
||||
"GtkRecentChooserDefault", impl);
|
||||
|
||||
@ -454,10 +461,8 @@ gtk_recent_chooser_default_constructor (GType type,
|
||||
gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (impl->filter_combo), FALSE);
|
||||
g_signal_connect (impl->filter_combo, "changed",
|
||||
G_CALLBACK (filter_combo_changed_cb), impl);
|
||||
gtk_tooltips_set_tip (impl->tooltips,
|
||||
impl->filter_combo,
|
||||
_("Select which type of documents are shown"),
|
||||
NULL);
|
||||
gtk_widget_set_tooltip_text (impl->filter_combo,
|
||||
_("Select which type of documents are shown"));
|
||||
|
||||
gtk_box_pack_end (GTK_BOX (impl->filter_combo_hbox),
|
||||
impl->filter_combo,
|
||||
@ -506,11 +511,6 @@ gtk_recent_chooser_default_set_property (GObject *object,
|
||||
break;
|
||||
case GTK_RECENT_CHOOSER_PROP_SHOW_TIPS:
|
||||
impl->show_tips = g_value_get_boolean (value);
|
||||
|
||||
if (impl->show_tips)
|
||||
gtk_tooltips_enable (impl->tooltips);
|
||||
else
|
||||
gtk_tooltips_disable (impl->tooltips);
|
||||
break;
|
||||
case GTK_RECENT_CHOOSER_PROP_SHOW_ICONS:
|
||||
impl->show_icons = g_value_get_boolean (value);
|
||||
@ -632,12 +632,6 @@ gtk_recent_chooser_default_dispose (GObject *object)
|
||||
impl->recent_store = NULL;
|
||||
}
|
||||
|
||||
if (impl->tooltips)
|
||||
{
|
||||
g_object_unref (impl->tooltips);
|
||||
impl->tooltips = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (_gtk_recent_chooser_default_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
@ -976,6 +970,8 @@ recent_icon_data_func (GtkTreeViewColumn *tree_column,
|
||||
|
||||
if (pixbuf)
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
gtk_recent_info_unref (info);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -986,8 +982,7 @@ recent_meta_data_func (GtkTreeViewColumn *tree_column,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkRecentInfo *info = NULL;
|
||||
gchar *uri, *name, *str;
|
||||
gchar *escaped_name, *escaped_location;
|
||||
gchar *name;
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
RECENT_DISPLAY_NAME_COLUMN, &name,
|
||||
@ -995,23 +990,11 @@ recent_meta_data_func (GtkTreeViewColumn *tree_column,
|
||||
-1);
|
||||
g_assert (info != NULL);
|
||||
|
||||
uri = gtk_recent_info_get_uri_display (info);
|
||||
|
||||
if (!name)
|
||||
name = gtk_recent_info_get_short_name (info);
|
||||
|
||||
escaped_name = g_markup_printf_escaped ("<b>%s</b>", name);
|
||||
escaped_location = g_markup_printf_escaped ("<small>%s: %s</small>",
|
||||
_("Location"),
|
||||
uri);
|
||||
str = g_strjoin ("\n", escaped_name, escaped_location, NULL);
|
||||
g_free (escaped_name);
|
||||
g_free (escaped_location);
|
||||
g_object_set (cell, "text", name, NULL);
|
||||
|
||||
g_object_set (cell, "markup", str, NULL);
|
||||
|
||||
g_free (str);
|
||||
g_free (uri);
|
||||
g_free (name);
|
||||
gtk_recent_info_unref (info);
|
||||
}
|
||||
@ -1573,7 +1556,54 @@ recent_view_drag_data_get_cb (GtkWidget *widget,
|
||||
g_free (drag_data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
recent_view_query_tooltip_cb (GtkWidget *widget,
|
||||
gint x,
|
||||
gint y,
|
||||
gboolean keyboard_tip,
|
||||
GtkTooltip *tooltip,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkRecentChooserDefault *impl = user_data;
|
||||
GtkTreeView *tree_view;
|
||||
GtkTreeIter iter;
|
||||
GtkTreePath *path = NULL;
|
||||
GtkRecentInfo *info = NULL;
|
||||
gchar *uri_display;
|
||||
|
||||
if (!impl->show_tips)
|
||||
return FALSE;
|
||||
|
||||
tree_view = GTK_TREE_VIEW (impl->recent_view);
|
||||
|
||||
gtk_tree_view_get_tooltip_context (tree_view,
|
||||
&x, &y,
|
||||
keyboard_tip,
|
||||
NULL, &path, NULL);
|
||||
if (!path)
|
||||
return FALSE;
|
||||
|
||||
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->recent_store), &iter, path))
|
||||
{
|
||||
gtk_tree_path_free (path);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_store), &iter,
|
||||
RECENT_INFO_COLUMN, &info,
|
||||
-1);
|
||||
|
||||
uri_display = gtk_recent_info_get_uri_display (info);
|
||||
|
||||
gtk_tooltip_set_text (tooltip, uri_display);
|
||||
gtk_tree_view_set_tooltip_row (tree_view, tooltip, path);
|
||||
|
||||
g_free (uri_display);
|
||||
gtk_tree_path_free (path);
|
||||
gtk_recent_info_unref (info);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
remove_selected_from_list (GtkRecentChooserDefault *impl)
|
||||
|
@ -44,7 +44,7 @@
|
||||
#include "gtkimage.h"
|
||||
#include "gtklabel.h"
|
||||
#include "gtkobject.h"
|
||||
#include "gtktooltips.h"
|
||||
#include "gtktooltip.h"
|
||||
#include "gtktypebuiltins.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtkalias.h"
|
||||
@ -85,9 +85,6 @@ struct _GtkRecentChooserMenuPrivate
|
||||
gulong manager_changed_id;
|
||||
|
||||
gulong populate_id;
|
||||
|
||||
/* tooltips for our bookmark items*/
|
||||
GtkTooltips *tooltips;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -242,9 +239,6 @@ gtk_recent_chooser_menu_init (GtkRecentChooserMenu *menu)
|
||||
priv->placeholder = NULL;
|
||||
|
||||
priv->current_filter = NULL;
|
||||
|
||||
priv->tooltips = gtk_tooltips_new ();
|
||||
g_object_ref_sink (priv->tooltips);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -287,12 +281,6 @@ gtk_recent_chooser_menu_dispose (GObject *object)
|
||||
priv->populate_id = 0;
|
||||
}
|
||||
|
||||
if (priv->tooltips)
|
||||
{
|
||||
g_object_unref (priv->tooltips);
|
||||
priv->tooltips = NULL;
|
||||
}
|
||||
|
||||
if (priv->current_filter)
|
||||
{
|
||||
g_object_unref (priv->current_filter);
|
||||
@ -741,25 +729,20 @@ gtk_recent_chooser_menu_add_tip (GtkRecentChooserMenu *menu,
|
||||
GtkWidget *item)
|
||||
{
|
||||
GtkRecentChooserMenuPrivate *priv;
|
||||
gchar *path, *tip_text;
|
||||
gchar *path;
|
||||
|
||||
g_assert (info != NULL);
|
||||
g_assert (item != NULL);
|
||||
|
||||
priv = menu->priv;
|
||||
|
||||
if (!priv->tooltips)
|
||||
return;
|
||||
|
||||
path = gtk_recent_info_get_uri_display (info);
|
||||
if (path)
|
||||
{
|
||||
tip_text = g_strdup_printf (_("Open '%s'"), path);
|
||||
gchar *tip_text = g_strdup_printf (_("Open '%s'"), path);
|
||||
|
||||
gtk_tooltips_set_tip (priv->tooltips,
|
||||
item,
|
||||
tip_text,
|
||||
NULL);
|
||||
gtk_widget_set_tooltip_text (item, tip_text);
|
||||
gtk_widget_set_has_tooltip (item, priv->show_tips);
|
||||
|
||||
g_free (path);
|
||||
g_free (tip_text);
|
||||
@ -1123,21 +1106,33 @@ get_icon_size_for_widget (GtkWidget *widget)
|
||||
return FALLBACK_ICON_SIZE;
|
||||
}
|
||||
|
||||
static void
|
||||
foreach_set_shot_tips (GtkWidget *widget,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkRecentChooserMenu *menu = user_data;
|
||||
GtkRecentChooserMenuPrivate *priv = menu->priv;
|
||||
gboolean has_mark;
|
||||
|
||||
/* toggle the tooltip only on the items we create */
|
||||
has_mark =
|
||||
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "gtk-recent-menu-mark"));
|
||||
|
||||
if (has_mark)
|
||||
gtk_widget_set_has_tooltip (widget, priv->show_tips);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_recent_chooser_menu_set_show_tips (GtkRecentChooserMenu *menu,
|
||||
gboolean show_tips)
|
||||
{
|
||||
if (menu->priv->show_tips == show_tips)
|
||||
GtkRecentChooserMenuPrivate *priv = menu->priv;
|
||||
|
||||
if (priv->show_tips == show_tips)
|
||||
return;
|
||||
|
||||
g_assert (menu->priv->tooltips != NULL);
|
||||
|
||||
if (show_tips)
|
||||
gtk_tooltips_enable (menu->priv->tooltips);
|
||||
else
|
||||
gtk_tooltips_disable (menu->priv->tooltips);
|
||||
|
||||
menu->priv->show_tips = show_tips;
|
||||
priv->show_tips = show_tips;
|
||||
gtk_container_foreach (GTK_CONTAINER (menu), foreach_set_shot_tips, menu);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -130,6 +130,8 @@ main (int argc,
|
||||
|
||||
dialog = g_object_new (GTK_TYPE_RECENT_CHOOSER_DIALOG,
|
||||
"select-multiple", multiple,
|
||||
"show-tips", TRUE,
|
||||
"show-icons", TRUE,
|
||||
NULL);
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "Select a file");
|
||||
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
|
||||
|
@ -65,6 +65,7 @@ create_recent_chooser_menu (gint limit)
|
||||
gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (menu), limit);
|
||||
gtk_recent_chooser_set_local_only (GTK_RECENT_CHOOSER (menu), TRUE);
|
||||
gtk_recent_chooser_set_show_icons (GTK_RECENT_CHOOSER (menu), TRUE);
|
||||
gtk_recent_chooser_set_show_tips (GTK_RECENT_CHOOSER (menu), TRUE);
|
||||
gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu),
|
||||
GTK_RECENT_SORT_MRU);
|
||||
gtk_recent_chooser_menu_set_show_numbers (GTK_RECENT_CHOOSER_MENU (menu),
|
||||
|
Loading…
Reference in New Issue
Block a user