1
/* $Id: xfsm-chooser.c 4711 2004-11-01 16:10:55Z benny $ */
3
* Copyright (c) 2004 Benedikt Meurer <benny@xfce.org>
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2, or (at your option)
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
36
#include <libxfce4util/libxfce4util.h>
37
#include <libxfcegui4/libxfcegui4.h>
39
#include <libxfsm/xfsm-splash-engine.h>
40
#include <libxfsm/xfsm-util.h>
42
#include <xfce4-session/xfsm-chooser.h>
48
static void xfsm_chooser_class_init (XfsmChooserClass *klass);
49
static void xfsm_chooser_init (XfsmChooser *chooser);
50
static void xfsm_chooser_finalize (GObject *object);
51
static void xfsm_chooser_row_activated (GtkTreeView *treeview,
53
GtkTreeViewColumn *column,
54
XfsmChooser *chooser);
55
static void xfsm_chooser_realized (GtkWidget *widget,
56
XfsmChooser *chooser);
69
static GObjectClass *parent_class;
73
xfsm_chooser_get_type (void)
75
static GType chooser_type = 0;
77
if (chooser_type == 0)
79
static const GTypeInfo chooser_info = {
80
sizeof (XfsmChooserClass),
83
(GClassInitFunc) xfsm_chooser_class_init,
88
(GInstanceInitFunc) xfsm_chooser_init,
91
chooser_type = g_type_register_static (GTK_TYPE_DIALOG,
102
xfsm_chooser_set_sessions (XfsmChooser *chooser,
104
const gchar *default_session)
106
XfsmSessionInfo *session;
112
model = gtk_tree_view_get_model (GTK_TREE_VIEW (chooser->tree));
113
gtk_list_store_clear (GTK_LIST_STORE (model));
115
for (lp = sessions; lp != NULL; lp = lp->next)
117
session = (XfsmSessionInfo *) lp->data;
119
title = g_strdup_printf ("<b><big>%s</big></b>\n"
120
"<small><i>Last access: %s</i></small>",
121
session->name, ctime (&session->atime));
123
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
124
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
125
PREVIEW_COLUMN, session->preview,
126
NAME_COLUMN, session->name,
128
ATIME_COLUMN, session->atime,
137
xfsm_chooser_get_session (const XfsmChooser *chooser)
139
GtkTreeSelection *selection;
145
bzero (&value, sizeof (value));
146
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (chooser->tree));
147
gtk_tree_selection_get_selected (selection, &model, &iter);
148
gtk_tree_model_get_value (model, &iter, NAME_COLUMN, &value);
149
name = g_value_dup_string (&value);
150
g_value_unset (&value);
157
xfsm_chooser_class_init (XfsmChooserClass *klass)
159
GObjectClass *gobject_class;
161
gobject_class = G_OBJECT_CLASS (klass);
162
gobject_class->finalize = xfsm_chooser_finalize;
164
parent_class = gtk_type_class (gtk_dialog_get_type ());
169
xfsm_chooser_init (XfsmChooser *chooser)
171
GtkTreeSelection *selection;
172
GtkTreeViewColumn *column;
173
GtkCellRenderer *renderer;
179
dbox = GTK_DIALOG (chooser)->vbox;
181
gtk_dialog_set_has_separator (GTK_DIALOG (chooser), FALSE);
182
g_signal_connect_after (G_OBJECT (chooser), "realize",
183
G_CALLBACK (xfsm_chooser_realized), chooser);
185
/* allocate tooltips */
186
chooser->tooltips = gtk_tooltips_new ();
187
g_object_ref (G_OBJECT (chooser->tooltips));
188
gtk_object_sink (GTK_OBJECT (chooser->tooltips));
190
/* scrolled window */
191
swin = gtk_scrolled_window_new (NULL, NULL);
192
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin),
194
GTK_POLICY_AUTOMATIC);
195
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swin),
196
GTK_SHADOW_ETCHED_IN);
197
gtk_box_pack_start (GTK_BOX (dbox), swin, TRUE, TRUE, 0);
198
gtk_widget_show (swin);
201
model = gtk_list_store_new (N_COLUMNS,
206
chooser->tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(model));
207
g_object_unref (G_OBJECT (model));
208
gtk_tooltips_set_tip (chooser->tooltips, chooser->tree,
209
_("Choose the session you want to restore. "
210
"You can simply double-click the session "
211
"name to restore it."),
213
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (chooser->tree), FALSE);
214
column = gtk_tree_view_column_new ();
215
renderer = gtk_cell_renderer_pixbuf_new ();
216
gtk_tree_view_column_pack_start (column, renderer, FALSE);
217
gtk_tree_view_column_set_attributes (column, renderer,
218
"pixbuf", PREVIEW_COLUMN,
220
renderer = gtk_cell_renderer_text_new ();
221
gtk_tree_view_column_pack_start (column, renderer, TRUE);
222
gtk_tree_view_column_set_attributes (column, renderer,
223
"markup", TITLE_COLUMN,
225
gtk_tree_view_append_column (GTK_TREE_VIEW (chooser->tree), column);
226
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (chooser->tree));
227
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
228
g_signal_connect (G_OBJECT (chooser->tree), "row-activated",
229
G_CALLBACK (xfsm_chooser_row_activated), chooser);
230
gtk_container_add (GTK_CONTAINER (swin), chooser->tree);
231
gtk_widget_set_size_request (chooser->tree, -1, 150);
232
gtk_widget_show (chooser->tree);
234
/* "Logout" button */
235
button = xfsm_imgbtn_new (_("Logout"), GTK_STOCK_QUIT, NULL);
236
gtk_tooltips_set_tip (chooser->tooltips, button,
237
_("Cancel the login attempt and return to "
238
"the login screen."),
240
gtk_dialog_add_action_widget (GTK_DIALOG (chooser), button,
241
GTK_RESPONSE_CANCEL);
242
gtk_widget_show (button);
245
button = xfsm_imgbtn_new (_("New session"), GTK_STOCK_NEW, NULL);
246
gtk_tooltips_set_tip (chooser->tooltips, button,
247
_("Create a new session."),
249
gtk_dialog_add_action_widget (GTK_DIALOG (chooser), button,
251
gtk_widget_show (button);
256
xfsm_chooser_finalize (GObject *object)
258
XfsmChooser *chooser;
260
chooser = XFSM_CHOOSER (object);
261
g_object_unref (chooser->tooltips);
263
G_OBJECT_CLASS (parent_class)->finalize (object);
268
xfsm_chooser_row_activated (GtkTreeView *treeview,
270
GtkTreeViewColumn *column,
271
XfsmChooser *chooser)
273
gtk_dialog_response (GTK_DIALOG (chooser), XFSM_RESPONSE_LOAD);
278
xfsm_chooser_realized (GtkWidget *widget,
279
XfsmChooser *chooser)
283
cursor = gdk_cursor_new (GDK_LEFT_PTR);
284
gdk_window_set_cursor (widget->window, cursor);
285
gdk_cursor_unref (cursor);