Skip to content

Commit 84bc053

Browse files
committed
revise recover dialog (again)
1 parent baef115 commit 84bc053

File tree

3 files changed

+70
-27
lines changed

3 files changed

+70
-27
lines changed

TODO

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
- doubleclick on file in recover to load?
1+
2+
- saveoptions.c should derive from GtkWindow, not GtkDialog
3+
4+
paste back into vipsdisp
5+
6+
other changes to go back?
7+
8+
use recover.c as a model
29

310
- try a flatpak build
411

@@ -40,14 +47,6 @@
4047

4148
or just remove it all
4249

43-
- saveoptions.c should derive from GtkWindow, not GtkDialog
44-
45-
paste back into vipsdisp
46-
47-
other changes to go back?
48-
49-
use recover.c as a model
50-
5150
- nip4 icon in "about" does not display
5251

5352
how odd

src/gtk/recover.ui

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<object class="GtkButton">
1414
<property name="label" translatable="yes">Cancel</property>
1515
<property name="action-name">win.cancel</property>
16+
1617
</object>
1718
</child>
1819

@@ -22,13 +23,18 @@
2223
<attribute name="weight" value="bold"/>
2324
</attributes>
2425
<property name="label">Recover after crash</property>
26+
2527
</object>
2628
</child>
2729

2830
<child type="end">
2931
<object class="GtkButton" id="ok">
3032
<property name="label" translatable="yes">Recover</property>
3133
<property name="action-name">win.ok</property>
34+
<style>
35+
<class name="suggested-action"/>
36+
</style>
37+
3238
</object>
3339
</child>
3440

src/recover.c

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ typedef struct _RecoverfileClass {
5757

5858
G_DEFINE_TYPE(Recoverfile, recoverfile, G_TYPE_OBJECT);
5959

60+
static GQuark recover_file_quark = 0;
61+
6062
#define RECOVERFILE_TYPE (recoverfile_get_type())
6163
#define RECOVERFILE(obj) \
6264
(G_TYPE_CHECK_INSTANCE_CAST((obj), RECOVERFILE_TYPE, Recoverfile))
@@ -147,6 +149,7 @@ recoverfile_class_init(RecoverfileClass *class)
147149
NULL,
148150
G_PARAM_READABLE));
149151

152+
recover_file_quark = g_quark_from_static_string("recover-file-quark");
150153
}
151154

152155
static void
@@ -259,6 +262,8 @@ struct _RecoverClass {
259262

260263
G_DEFINE_TYPE(Recover, recover, GTK_TYPE_APPLICATION_WINDOW);
261264

265+
static GQuark recover_quark = 0;
266+
262267
static void
263268
recover_dispose(GObject *object)
264269
{
@@ -269,6 +274,39 @@ recover_dispose(GObject *object)
269274
G_OBJECT_CLASS(recover_parent_class)->dispose(object);
270275
}
271276

277+
static void
278+
recover_recover_recoverfile(Recover *recover, Recoverfile *file)
279+
{
280+
Workspacegroup *wsg = workspacegroup_new_from_file(recover->wsr,
281+
file->filename, file->filename);
282+
if (wsg) {
283+
GtkApplication *app = gtk_window_get_application(GTK_WINDOW(recover));
284+
285+
// try to restore the filename
286+
iobject_set(IOBJECT(wsg), file->name, "recovered workspace");
287+
g_autofree char *filename = g_strdup_printf("%s.ws", file->name);
288+
filemodel_set_filename(FILEMODEL(wsg), filename);
289+
290+
Mainwindow *main = mainwindow_new(APP(app), wsg);
291+
gtk_window_present(GTK_WINDOW(main));
292+
mainwindow_cull();
293+
symbol_recalculate_all();
294+
295+
gtk_window_destroy(GTK_WINDOW(recover));
296+
}
297+
}
298+
299+
static void
300+
recover_pressed(GtkGestureClick *gesture,
301+
guint n_press, double x, double y, GtkWidget *label)
302+
{
303+
Recoverfile *file = g_object_get_qdata(G_OBJECT(label), recover_file_quark);
304+
Recover *recover = g_object_get_qdata(G_OBJECT(label), recover_quark);
305+
306+
if (n_press == 2)
307+
recover_recover_recoverfile(recover, file);
308+
}
309+
272310
static void
273311
recover_setup_item(GtkListItemFactory *factory,
274312
GtkListItem *item, void *user_data)
@@ -282,6 +320,12 @@ recover_setup_item(GtkListItemFactory *factory,
282320
else
283321
gtk_label_set_xalign(GTK_LABEL(label), 1.0);
284322

323+
GtkGesture *gesture = gtk_gesture_click_new();
324+
g_signal_connect(gesture, "pressed", G_CALLBACK(recover_pressed), label);
325+
gtk_event_controller_set_propagation_phase(GTK_EVENT_CONTROLLER(gesture),
326+
GTK_PHASE_BUBBLE);
327+
gtk_widget_add_controller(label, GTK_EVENT_CONTROLLER(gesture));
328+
285329
gtk_list_item_set_child(item, label);
286330
}
287331

@@ -292,6 +336,7 @@ recover_bind_item(GtkListItemFactory *factory,
292336
const char *field = (const char *) user_data;
293337
GtkWidget *label = gtk_list_item_get_child(item);
294338
Recoverfile *file = gtk_list_item_get_item(item);
339+
Recover *recover = g_object_get_qdata(G_OBJECT(factory), recover_quark);
295340

296341
g_autofree char *str = NULL;
297342

@@ -317,6 +362,9 @@ recover_bind_item(GtkListItemFactory *factory,
317362
g_value_unset(&value);
318363

319364
gtk_widget_set_tooltip_text(label, file->filename);
365+
366+
g_object_set_qdata(G_OBJECT(label), recover_file_quark, file);
367+
g_object_set_qdata(G_OBJECT(label), recover_quark, recover);
320368
}
321369

322370
static void *
@@ -433,24 +481,7 @@ recover_ok_action(GSimpleAction *action,
433481
GObject *item = gtk_single_selection_get_selected_item(recover->selection);
434482
Recoverfile *file = RECOVERFILE(item);
435483

436-
Workspacegroup *wsg = workspacegroup_new_from_file(recover->wsr,
437-
file->filename, file->filename);
438-
if (wsg) {
439-
GtkApplication *app = gtk_window_get_application(GTK_WINDOW(recover));
440-
441-
// try to restore the filename
442-
iobject_set(IOBJECT(wsg), file->name, "recovered workspace");
443-
g_autofree char *filename = g_strdup_printf("%s.ws", file->name);
444-
filemodel_set_filename(FILEMODEL(wsg), filename);
445-
446-
Mainwindow *main = mainwindow_new(APP(app), wsg);
447-
gtk_window_present(GTK_WINDOW(main));
448-
// don't call mainwindow_cull() .... we don't want to remove empty
449-
// recovered wses
450-
symbol_recalculate_all();
451-
452-
gtk_window_destroy(GTK_WINDOW(recover));
453-
}
484+
recover_recover_recoverfile(recover, file);
454485
}
455486

456487
static GActionEntry recover_entries[] = {
@@ -482,6 +513,7 @@ recover_init(Recover *recover)
482513
gtk_widget_init_template(GTK_WIDGET(recover));
483514

484515
factory = gtk_signal_list_item_factory_new();
516+
g_object_set_qdata(G_OBJECT(factory), recover_quark, recover);
485517
g_signal_connect(factory, "setup",
486518
G_CALLBACK(recover_setup_item), "name");
487519
g_signal_connect(factory, "bind",
@@ -491,6 +523,7 @@ recover_init(Recover *recover)
491523
gtk_column_view_append_column(GTK_COLUMN_VIEW(recover->table), column);
492524

493525
factory = gtk_signal_list_item_factory_new();
526+
g_object_set_qdata(G_OBJECT(factory), recover_quark, recover);
494527
g_signal_connect(factory, "setup",
495528
G_CALLBACK(recover_setup_item), "pid");
496529
g_signal_connect(factory, "bind",
@@ -499,6 +532,7 @@ recover_init(Recover *recover)
499532
gtk_column_view_append_column(GTK_COLUMN_VIEW(recover->table), column);
500533

501534
factory = gtk_signal_list_item_factory_new();
535+
g_object_set_qdata(G_OBJECT(factory), recover_quark, recover);
502536
g_signal_connect(factory, "setup",
503537
G_CALLBACK(recover_setup_item), "date");
504538
g_signal_connect(factory, "bind",
@@ -507,6 +541,7 @@ recover_init(Recover *recover)
507541
gtk_column_view_append_column(GTK_COLUMN_VIEW(recover->table), column);
508542

509543
factory = gtk_signal_list_item_factory_new();
544+
g_object_set_qdata(G_OBJECT(factory), recover_quark, recover);
510545
g_signal_connect(factory, "setup",
511546
G_CALLBACK(recover_setup_item), "time");
512547
g_signal_connect(factory, "bind",
@@ -515,6 +550,7 @@ recover_init(Recover *recover)
515550
gtk_column_view_append_column(GTK_COLUMN_VIEW(recover->table), column);
516551

517552
factory = gtk_signal_list_item_factory_new();
553+
g_object_set_qdata(G_OBJECT(factory), recover_quark, recover);
518554
g_signal_connect(factory, "setup",
519555
G_CALLBACK(recover_setup_item), "size");
520556
g_signal_connect(factory, "bind",
@@ -537,6 +573,8 @@ recover_class_init(RecoverClass *class)
537573
BIND_VARIABLE(Recover, location);
538574
BIND_VARIABLE(Recover, table);
539575
BIND_VARIABLE(Recover, used);
576+
577+
recover_quark = g_quark_from_static_string("recover-quark");
540578
}
541579

542580
Recover *

0 commit comments

Comments
 (0)