1
/* callbacks.c: this file is part of disks-admin, a gnome-system-tool frontend
2
* for disks administration.
4
* Copyright (C) 2001 Ximian, Inc.
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
8
* published by the Free Software Foundation; either version 2 of the
9
* License, or (at your option) any later version.
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 02111-1307, USA.
20
* Authors: Alvaro Peļæ½a Gonzalez <apg@esware.com>
21
* Carlos Garcia Campos <elkalmail@yahoo.es>
31
#include "disks-storage.h"
32
#include "disks-storage-disk.h"
33
#include "disks-storage-cdrom.h"
34
#include "disks-cdrom-disc.h"
35
#include "disks-cdrom-disc-data.h"
36
#include "disks-cdrom-disc-audio.h"
37
#include "disks-mountable.h"
38
#include "disks-partition.h"
39
#include "disks-gui.h"
40
#include "callbacks.h"
56
gst_on_storage_list_selection_change (GtkTreeSelection *selection, gpointer gdata)
61
GtkTreeSelection *selec;
62
GstDisksStorage *storage;
64
GtkWidget *storage_list;
65
GtkWidget *main_window;
69
GtkWidget *properties_notebook;
73
g_signal_handlers_block_by_func (G_OBJECT (selection),
74
G_CALLBACK (gst_on_storage_list_selection_change),
77
notebook = gst_dialog_get_widget (tool->main_dialog, "main_notebook");
78
storage_list = gst_dialog_get_widget (tool->main_dialog, "storage_list");
79
main_window = gst_dialog_get_widget (tool->main_dialog, "disks_admin");
81
if (gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter)) {
82
gtk_tree_model_get (model, &iter, STORAGE_LIST_POINTER, &storage, -1);
84
if (GST_IS_DISKS_STORAGE (storage)) {
85
/* Properties Notebook */
86
properties_notebook = gst_dialog_get_widget (tool->main_dialog,
87
"properties_notebook");
88
if (GST_IS_DISKS_STORAGE_DISK (storage)) {
89
gtk_widget_show (properties_notebook);
90
gtk_notebook_set_current_page (GTK_NOTEBOOK (properties_notebook),
93
cursor = gdk_cursor_new (GDK_WATCH);
94
if (!GTK_WIDGET_REALIZED (main_window))
95
gtk_widget_realize (GTK_WIDGET (main_window));
96
gdk_window_set_cursor (main_window->window, cursor);
97
gtk_widget_set_sensitive (storage_list, FALSE);
99
gst_disks_storage_setup_properties_widget (storage);
101
gtk_widget_set_sensitive (storage_list, TRUE);
102
gdk_cursor_destroy (cursor);
103
gdk_window_set_cursor (main_window->window, NULL);
106
g_object_get (G_OBJECT (storage), "partitions", &partitions, NULL);
108
treeview = gst_dialog_get_widget (tool->main_dialog, "partition_list");
109
model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
112
gst_disks_gui_setup_partition_list (treeview, partitions);
114
selec = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
115
gtk_tree_model_get_iter_first (model, &iter);
116
gtk_tree_selection_select_iter (selec, &iter);
118
gtk_tree_store_clear (GTK_TREE_STORE (model));
119
gst_on_partition_list_selection_change (
120
gtk_tree_view_get_selection (
121
GTK_TREE_VIEW (treeview)),
125
gtk_widget_hide (gtk_notebook_get_nth_page (
126
GTK_NOTEBOOK (notebook), TAB_CDROM_DISC));
127
gtk_widget_show_all (gtk_notebook_get_nth_page (
128
GTK_NOTEBOOK (notebook), TAB_PARTITIONS));
130
} else if (GST_IS_DISKS_STORAGE_CDROM (storage)) {
131
gtk_widget_show (properties_notebook);
132
gtk_notebook_set_current_page (GTK_NOTEBOOK (properties_notebook),
135
cursor = gdk_cursor_new (GDK_WATCH);
136
if (!GTK_WIDGET_REALIZED (main_window))
137
gtk_widget_realize (GTK_WIDGET (main_window));
138
gdk_window_set_cursor (main_window->window, cursor);
139
gtk_widget_set_sensitive (storage_list, FALSE);
141
gst_disks_storage_setup_properties_widget (storage);
143
gtk_widget_set_sensitive (storage_list, TRUE);
144
gdk_cursor_destroy (cursor);
145
gdk_window_set_cursor (main_window->window, NULL);
147
g_object_get (G_OBJECT (storage), "empty", &cd_empty,
148
"disc", &disc, NULL);
151
gtk_widget_show (gtk_notebook_get_nth_page (
152
GTK_NOTEBOOK (notebook),
155
gtk_widget_hide (gtk_notebook_get_nth_page (
156
GTK_NOTEBOOK (notebook),
160
gtk_widget_hide (gtk_notebook_get_nth_page (
161
GTK_NOTEBOOK (notebook), TAB_PARTITIONS));
163
gtk_widget_hide (gtk_notebook_get_nth_page (
164
GTK_NOTEBOOK (notebook), TAB_PARTITIONS));
165
gtk_widget_hide (gtk_notebook_get_nth_page (
166
GTK_NOTEBOOK (notebook), TAB_CDROM_DISC));
167
gtk_widget_hide (properties_notebook);
173
g_signal_handlers_unblock_by_func (G_OBJECT (selection),
174
G_CALLBACK (gst_on_storage_list_selection_change),
179
gst_on_storage_list_button_press (GtkTreeView *treeview, GdkEventButton *event, gpointer gdata)
181
GtkTreeSelection *selection;
183
if (event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS) {
184
selection = gtk_tree_view_get_selection (treeview);
185
gst_on_storage_list_selection_change (selection, NULL);
192
gst_on_partition_list_selection_change (GtkTreeSelection *selection, gpointer gdata)
196
GstDisksPartition *part = NULL;
198
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
199
gtk_tree_model_get (model, &iter, PARTITION_LIST_POINTER, &part, -1);
200
if (GST_IS_DISKS_PARTITION (part)) {
201
gst_disks_partition_setup_properties_widget (part);
204
gst_disks_partition_setup_properties_widget (part); /* part == NULL */
209
gst_on_point_entry_changed (GtkWidget *entry, gpointer gdata)
214
GtkTreeSelection *selection;
215
GstDisksPartition *part;
216
GstDisksStorageCdrom *cdrom;
218
GstCdromDiscData *disc_data;
221
treeview = (GtkWidget *) gdata;
223
point = gtk_entry_get_text (GTK_ENTRY (entry));
225
if (point == NULL || strlen (point) <= 0)
228
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
229
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
230
if (gtk_tree_model_get_n_columns (model) == PARTITION_LIST_LAST) {
231
gtk_tree_model_get (model, &iter, PARTITION_LIST_POINTER, &part, -1);
232
if (GST_IS_DISKS_PARTITION (part)) {
233
g_object_set (G_OBJECT (part), "point", point, NULL);
235
} else if (gtk_tree_model_get_n_columns (model) == STORAGE_LIST_LAST) {
236
gtk_tree_model_get (model, &iter, STORAGE_LIST_POINTER, &cdrom, -1);
237
if (GST_IS_DISKS_STORAGE_CDROM (cdrom)) {
238
g_object_get (G_OBJECT (cdrom), "disc", &disc, NULL);
239
if (GST_IS_CDROM_DISC_DATA (disc)) {
240
g_object_set (G_OBJECT (disc), "mount-point",
242
} else if (GST_IS_CDROM_DISC_MIXED (disc)) {
243
g_object_get (G_OBJECT (disc), "data",
245
if (GST_IS_CDROM_DISC_DATA (disc_data))
246
g_object_set (G_OBJECT (disc_data), "mount-point",
256
gst_on_mount_button_clicked (GtkWidget *button, gpointer gdata)
261
GtkTreeSelection *selection;
262
GstDisksPartition *part;
263
GstDisksStorageCdrom *cdrom;
266
treeview = (GtkWidget *) gdata;
268
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
269
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
270
if (gtk_tree_model_get_n_columns (model) == PARTITION_LIST_LAST) {
271
gtk_tree_model_get (model, &iter, PARTITION_LIST_POINTER, &part, -1);
273
if (GST_IS_DISKS_PARTITION (part)) {
274
/*gst_disks_partition_mount (part);*/
275
gst_disks_mountable_mount (GST_DISKS_MOUNTABLE (part));
277
gst_disks_partition_setup_properties_widget (part);
279
} else if (gtk_tree_model_get_n_columns (model) == STORAGE_LIST_LAST) {
280
gtk_tree_model_get (model, &iter, STORAGE_LIST_POINTER, &cdrom, -1);
281
if (GST_IS_DISKS_STORAGE_CDROM (cdrom)) {
282
/*gst_disks_cdrom_mount (cdrom);*/
283
g_object_get (G_OBJECT (cdrom), "disc", &disc, NULL);
284
if (GST_IS_CDROM_DISC_DATA (disc))
285
gst_disks_mountable_mount (GST_DISKS_MOUNTABLE (disc));
287
gst_disks_storage_setup_properties_widget (GST_DISKS_STORAGE (cdrom));
295
gst_on_browse_button_clicked (GtkWidget *button, gpointer gdata)
300
GtkTreeSelection *selection;
301
GstDisksPartition *part;
302
GstDisksStorageCdrom *cdrom;
305
treeview = (GtkWidget *) gdata;
307
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
308
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
309
if (gtk_tree_model_get_n_columns (model) == PARTITION_LIST_LAST) {
310
gtk_tree_model_get (model, &iter, PARTITION_LIST_POINTER, &part, -1);
311
if (GST_IS_DISKS_PARTITION (part)) {
312
gst_disks_partition_browse (part);
314
} else if (gtk_tree_model_get_n_columns (model) == STORAGE_LIST_LAST) {
315
gtk_tree_model_get (model, &iter, STORAGE_LIST_POINTER, &cdrom, -1);
316
if (GST_IS_DISKS_STORAGE_CDROM (cdrom)) {
317
g_object_get (G_OBJECT (cdrom), "disc", &disc, NULL);
318
if (GST_IS_CDROM_DISC_DATA (disc)) {
319
gst_disks_cdrom_disc_data_browse (GST_CDROM_DISC_DATA (disc));
320
} else if (GST_IS_CDROM_DISC_MIXED (disc)) {
321
gst_disks_cdrom_disc_mixed_browse (GST_CDROM_DISC_MIXED (disc));
329
gst_on_play_button_clicked (GtkWidget *button, gpointer gdata)
334
GtkTreeSelection *selection;
335
GstDisksStorageCdrom *cdrom;
339
treeview = (GtkWidget *) gdata;
341
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
342
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
343
gtk_tree_model_get (model, &iter, STORAGE_LIST_POINTER, &cdrom, -1);
344
if (GST_IS_DISKS_STORAGE_CDROM (cdrom)) {
345
g_object_get (G_OBJECT (cdrom), "device", &device,
346
"disc", &disc, NULL);
347
if (GST_IS_CDROM_DISC_AUDIO (disc)) {
348
gst_disks_cdrom_disc_audio_play (GST_CDROM_DISC_AUDIO (disc), device);
349
} else if (GST_IS_CDROM_DISC_MIXED (disc)) {
350
gst_disks_cdrom_disc_mixed_play (GST_CDROM_DISC_MIXED (disc), device);
357
gst_on_partition_list_button_press (GtkTreeView *treeview, GdkEventButton *event, gpointer gdata)
360
GtkItemFactory *factory;
362
factory = (GtkItemFactory *) gdata;
364
if (event->button == 3)
366
gtk_widget_grab_focus (GTK_WIDGET (treeview));
367
if (gtk_tree_view_get_path_at_pos (treeview, event->x, event->y, &path, NULL, NULL, NULL))
369
gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (treeview));
370
gtk_tree_selection_select_path (gtk_tree_view_get_selection (treeview), path);
372
gtk_item_factory_popup (factory, event->x_root, event->y_root,
373
event->button, event->time);
381
gst_disks_storage_get_device_speed_cb (GstDirectiveEntry *entry)
383
GtkWidget *speed_label;
386
gchar *device, *media;
389
GstDisksStorage *storage;
391
storage = (GstDisksStorage *) entry->data;
393
if (GST_IS_DISKS_STORAGE_CDROM (storage)) {
394
media = g_strdup ("cdrom");
395
} else if (GST_IS_DISKS_STORAGE_DISK (storage)) {
396
media = g_strdup ("disk");
400
speed = g_strdup_printf ("%s_speed_label", media);
401
speed_label = gst_dialog_get_widget (tool->main_dialog, speed);
404
g_object_set (G_OBJECT (storage), "speed", _("Getting ..."), NULL);
405
gtk_label_set_text (GTK_LABEL (speed_label), _("Getting ..."));
407
g_object_get (G_OBJECT (storage), "device", &device, NULL);
408
xml = gst_tool_run_get_directive (entry->tool, entry->report_sign,
409
entry->directive, device, NULL);
412
g_object_set (G_OBJECT (storage), "speed", _("Not Available"), NULL);
413
gtk_label_set_text (GTK_LABEL (speed_label), _("Not Available"));
417
root = gst_xml_doc_get_root (xml);
419
buf = gst_xml_get_child_content (root, "speed");
421
gst_xml_doc_destroy (xml);
424
g_object_set (G_OBJECT (storage), "speed", buf, NULL);
425
gtk_label_set_text (GTK_LABEL (speed_label), buf);
428
g_object_set (G_OBJECT (storage), "speed", _("Not Available"), NULL);
429
gtk_label_set_text (GTK_LABEL (speed_label), _("Not Available"));
436
gst_on_change_mp_button_clicked (GtkWidget *button, gpointer gdata)
439
GtkWidget *point_entry;
442
filesel = gtk_file_chooser_dialog_new (_("Select New Mount Point Path"),
443
NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
444
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
445
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
447
if (g_ascii_strcasecmp (gtk_widget_get_name (button), "cd_change_mp_button") == 0) {
448
point_entry = gst_dialog_get_widget (tool->main_dialog, "cd_point_entry");
450
point_entry = gst_dialog_get_widget (tool->main_dialog, "part_point_entry");
453
filename = g_strdup (gtk_entry_get_text (GTK_ENTRY (point_entry)));
455
if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
456
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filesel),
465
if (gtk_dialog_run (GTK_DIALOG (filesel)) == GTK_RESPONSE_ACCEPT) {
466
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
467
gtk_entry_set_text (GTK_ENTRY (point_entry), filename);
471
gtk_widget_destroy (filesel);