kopia lustrzana https://gitlab.com/sane-project/frontends
sharing the 'create_submenu' function
rodzic
5078476c8b
commit
6080fa1f91
|
@ -131,3 +131,31 @@ create_submenu_item ( GMenu *menu,
|
||||||
|
|
||||||
g_object_unref ( item );
|
g_object_unref ( item );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GMenu*
|
||||||
|
create_submenu(GMenu *menu, char *label, char *action, GVariant *state, GApplication *app, void (*fct_toggle) (GSimpleAction *, GVariant *, gpointer))
|
||||||
|
{
|
||||||
|
GSimpleAction *act;
|
||||||
|
GMenu *section;
|
||||||
|
GMenuItem *menu_item;
|
||||||
|
if (action) {
|
||||||
|
if (state)
|
||||||
|
act = g_simple_action_new_stateful (action + 4, NULL, state);
|
||||||
|
else
|
||||||
|
act = g_simple_action_new (action + 4, NULL);
|
||||||
|
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (act));
|
||||||
|
}
|
||||||
|
if (fct_toggle)
|
||||||
|
g_signal_connect (act, "activate", G_CALLBACK (fct_toggle), app);
|
||||||
|
|
||||||
|
section = g_menu_new ();
|
||||||
|
menu_item = g_menu_item_new (label, action);
|
||||||
|
|
||||||
|
g_menu_append_item (section, menu_item);
|
||||||
|
g_object_unref (menu_item);
|
||||||
|
|
||||||
|
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,5 +30,6 @@ void gtk_box_pack_end (GtkBox *box, GtkWidget* child, gboolean expand, gboolean
|
||||||
// void gtk_window_set_position_with_mouse (GtkWindow *window);
|
// void gtk_window_set_position_with_mouse (GtkWindow *window);
|
||||||
void create_submenu_item (GMenu *menu, GMenu *submenu, const gchar *const label);
|
void create_submenu_item (GMenu *menu, GMenu *submenu, const gchar *const label);
|
||||||
void create_item (GMenu *menu, const gchar *const label, const gchar *const action, const gchar *const icon, const gchar *const target, const gchar *const accel);
|
void create_item (GMenu *menu, const gchar *const label, const gchar *const action, const gchar *const icon, const gchar *const target, const gchar *const accel);
|
||||||
|
GMenu* create_submenu(GMenu *menu, char *label, char *action, GVariant *state, GApplication *app, void (*fct_toggle) (GSimpleAction *, GVariant *, gpointer));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
192
src/xcam.c
192
src/xcam.c
|
@ -147,8 +147,8 @@ win;
|
||||||
/* forward declarations: */
|
/* forward declarations: */
|
||||||
int main (int argc, char **argv);
|
int main (int argc, char **argv);
|
||||||
|
|
||||||
static void rescan_devices (GtkWidget * widget, gpointer client_data,
|
static void rescan_devices (GSimpleAction *action, GVariant *parameter, gpointer data);
|
||||||
gpointer call_data);
|
|
||||||
static void next_frame (void);
|
static void next_frame (void);
|
||||||
|
|
||||||
static void save_frame (void);
|
static void save_frame (void);
|
||||||
|
@ -183,14 +183,14 @@ calc_little_endian (void)
|
||||||
GDK_ENTER_NOTIFY_MASK
|
GDK_ENTER_NOTIFY_MASK
|
||||||
|
|
||||||
static void
|
static void
|
||||||
display_image (Canvas * canvas)
|
display_image (Canvas * canvas, cairo_t *cr)
|
||||||
{
|
{
|
||||||
if (canvas->gdk_image)
|
if (canvas->gdk_image)
|
||||||
{
|
{
|
||||||
cairo_t *cr = cairo_create (canvas->surface);
|
// cairo_t *cr = cairo_create (canvas->surface);
|
||||||
gdk_cairo_set_source_pixbuf (cr, canvas->gdk_image, 0, 0);
|
gdk_cairo_set_source_pixbuf (cr, canvas->gdk_image, 0, 0);
|
||||||
cairo_paint (cr);
|
cairo_paint (cr);
|
||||||
cairo_destroy (cr);
|
// cairo_destroy (cr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ canvas_events (GtkDrawingArea *area, cairo_t *cr, int width, int height, gpointe
|
||||||
Canvas *canvas = (Canvas *)user_data;
|
Canvas *canvas = (Canvas *)user_data;
|
||||||
if (!canvas)
|
if (!canvas)
|
||||||
return;
|
return;
|
||||||
display_image (canvas);
|
display_image (canvas, cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -589,7 +589,7 @@ device_name_dialog_ok (GtkWidget * widget, gpointer data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
prompt_for_device_name (GtkWidget * widget, gpointer data)
|
prompt_for_device_name (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *vbox, *hbox, *label, *text;
|
GtkWidget *vbox, *hbox, *label, *text;
|
||||||
GtkWidget *button, *dialog;
|
GtkWidget *button, *dialog;
|
||||||
|
@ -646,7 +646,7 @@ prompt_for_device_name (GtkWidget * widget, gpointer data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
exit_callback (GtkWidget * widget, gpointer data)
|
exit_callback (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
if (dialog)
|
if (dialog)
|
||||||
gsg_destroy_dialog (dialog);
|
gsg_destroy_dialog (dialog);
|
||||||
|
@ -655,7 +655,7 @@ exit_callback (GtkWidget * widget, gpointer data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
save_defaults_callback (GtkWidget * widget, gpointer data)
|
save_defaults_callback (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
|
@ -665,19 +665,19 @@ save_defaults_callback (GtkWidget * widget, gpointer data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
load_defaults_callback (GtkWidget * widget, gpointer data)
|
load_defaults_callback (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
load_defaults (0);
|
load_defaults (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
save_as_callback (GtkWidget * widget, gpointer data)
|
save_as_callback (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
gsg_set_filename ("File to save settings to", device_settings_filename, save_settings);
|
gsg_set_filename ("File to save settings to", device_settings_filename, save_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
load_from_callback (GtkWidget * widget, gpointer data)
|
load_from_callback (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
if (gsg_get_filename
|
if (gsg_get_filename
|
||||||
("File to load settings from", device_settings_filename, device_settings_filename) < 0)
|
("File to load settings from", device_settings_filename, device_settings_filename) < 0)
|
||||||
|
@ -719,6 +719,9 @@ static GMenu *
|
||||||
build_files_menu (void)
|
build_files_menu (void)
|
||||||
{
|
{
|
||||||
DBG (DBG_debug, "xcam: build_files_menu: enter\n");
|
DBG (DBG_debug, "xcam: build_files_menu: enter\n");
|
||||||
|
GSimpleAction *act_quit = g_simple_action_new ("quit", NULL);
|
||||||
|
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (act_quit));
|
||||||
|
g_signal_connect (act_quit, "activate", G_CALLBACK (exit_callback), app);
|
||||||
|
|
||||||
GMenu *menu = g_menu_new ();
|
GMenu *menu = g_menu_new ();
|
||||||
GMenu *section1 = g_menu_new ();
|
GMenu *section1 = g_menu_new ();
|
||||||
|
@ -810,126 +813,106 @@ build_device_menu (void)
|
||||||
GSimpleAction *action = g_simple_action_new (device[i]->name, NULL );
|
GSimpleAction *action = g_simple_action_new (device[i]->name, NULL );
|
||||||
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
|
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
|
||||||
create_item (menu, device[i]->name, "app.scanner", NULL, device[i]->name, NULL);
|
create_item (menu, device[i]->name, "app.scanner", NULL, device[i]->name, NULL);
|
||||||
/*
|
|
||||||
item = gtk_menu_item_new_with_label ((char *) device[i]->name);
|
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
g_signal_connect (G_OBJECT (item), "activate",
|
|
||||||
G_CALLBACK (device_activate_callback),
|
|
||||||
(gpointer) device[i]);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
/*
|
create_submenu(menu, "Refresh device list...", "app.rescan", NULL, app, rescan_devices);
|
||||||
item = gtk_menu_item_new ();
|
create_submenu(menu, "Specify device name...", "app.prompt", NULL, app, prompt_for_device_name);
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
*/
|
|
||||||
create_item (menu, "Refresh device list...", "app.refresh", NULL, "Refresh device list...", NULL);
|
|
||||||
/*
|
|
||||||
item = gtk_menu_item_new_with_label ("Refresh device list...");
|
|
||||||
g_signal_connect (G_OBJECT (item), "activate",
|
|
||||||
G_CALLBACK (rescan_devices), 0);
|
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
*/
|
|
||||||
create_item (menu, "Specify device name...", "app.specify", NULL, "Specify device name...", NULL);
|
|
||||||
/*
|
|
||||||
item = gtk_menu_item_new_with_label ("Specify device name...");
|
|
||||||
g_signal_connect (G_OBJECT (item), "activate",
|
|
||||||
G_CALLBACK (prompt_for_device_name), 0);
|
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
*/
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pref_toggle_advanced (GtkWidget * widget, gpointer data)
|
pref_toggle_advanced (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
/*
|
GApplication *application = G_APPLICATION (data);
|
||||||
preferences.advanced = (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)) != 0);
|
GVariant *state;
|
||||||
|
gboolean b;
|
||||||
|
|
||||||
|
g_application_hold (application);
|
||||||
|
state = g_action_get_state (G_ACTION (action));
|
||||||
|
b = g_variant_get_boolean (state);
|
||||||
|
g_variant_unref (state);
|
||||||
|
g_simple_action_set_state (action, g_variant_new_boolean (!b));
|
||||||
|
g_application_release (application);
|
||||||
|
preferences.advanced = !b;
|
||||||
gsg_set_advanced (dialog, preferences.advanced);
|
gsg_set_advanced (dialog, preferences.advanced);
|
||||||
pref_xcam_save ();
|
pref_xcam_save ();
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pref_toggle_tooltips (GtkWidget * widget, gpointer data)
|
pref_toggle_tooltips (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
/*
|
GApplication *application = G_APPLICATION (data);
|
||||||
preferences.tooltips_enabled = (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)) != 0);
|
GVariant *state;
|
||||||
|
gboolean b;
|
||||||
|
|
||||||
|
g_application_hold (application);
|
||||||
|
state = g_action_get_state (G_ACTION (action));
|
||||||
|
b = g_variant_get_boolean (state);
|
||||||
|
g_variant_unref (state);
|
||||||
|
g_simple_action_set_state (action, g_variant_new_boolean (!b));
|
||||||
|
g_application_release (application);
|
||||||
|
preferences.tooltips_enabled = !b;
|
||||||
gsg_set_tooltips (preferences.tooltips_enabled);
|
gsg_set_tooltips (preferences.tooltips_enabled);
|
||||||
pref_xcam_save ();
|
pref_xcam_save ();
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pref_toggle_twocolumn (GtkWidget * widget, gpointer data)
|
pref_toggle_twocolumn (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
/*
|
GApplication *application = G_APPLICATION (data);
|
||||||
preferences.twocolumn_enabled = (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)) != 0);
|
GVariant *state;
|
||||||
|
gboolean b;
|
||||||
|
|
||||||
|
g_application_hold (application);
|
||||||
|
state = g_action_get_state (G_ACTION (action));
|
||||||
|
b = g_variant_get_boolean (state);
|
||||||
|
g_variant_unref (state);
|
||||||
|
g_simple_action_set_state (action, g_variant_new_boolean (!b));
|
||||||
|
g_application_release (application);
|
||||||
|
preferences.twocolumn_enabled = !b;
|
||||||
gsg_set_twocolumn (dialog, preferences.twocolumn_enabled);
|
gsg_set_twocolumn (dialog, preferences.twocolumn_enabled);
|
||||||
pref_xcam_save ();
|
pref_xcam_save ();
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GMenu *
|
static GMenu *
|
||||||
build_preferences_menu (GSGDialog * dialog)
|
build_preferences_menu (GSGDialog * dialog)
|
||||||
{
|
{
|
||||||
|
GVariant *state;
|
||||||
GMenu *menu;
|
GMenu *menu;
|
||||||
GSimpleAction *act;
|
|
||||||
|
|
||||||
act = g_simple_action_new ("advaanced", NULL);
|
|
||||||
g_signal_connect_swapped (act, "activate", G_CALLBACK (pref_toggle_advanced), 0);
|
|
||||||
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (act));
|
|
||||||
|
|
||||||
menu = g_menu_new ();
|
menu = g_menu_new ();
|
||||||
|
|
||||||
// advanced user option:
|
// advanced user option:
|
||||||
create_item (menu, "Show advanced options", "app.advanced", NULL, "Show advanced options", NULL);
|
state = g_variant_new_boolean (preferences.advanced);
|
||||||
// gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), preferences.advanced);
|
create_submenu(menu, "Show advanced options", "app.advanced", state, app, pref_toggle_advanced);
|
||||||
// g_signal_connect (G_OBJECT (item), "toggled", G_CALLBACK (pref_toggle_advanced), 0);
|
|
||||||
|
|
||||||
// tooltips submenu:
|
// tooltips submenu:
|
||||||
|
state = g_variant_new_boolean (preferences.tooltips_enabled);
|
||||||
|
create_submenu(menu, "Show tooltips", "app.tooltips", state, app, pref_toggle_tooltips);
|
||||||
|
|
||||||
create_item (menu, "Show tooltips", "app.tooltips", NULL, "Show tooltips", NULL);
|
// two column submenu:
|
||||||
// gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), preferences.tooltips_enabled);
|
state = g_variant_new_boolean (preferences.twocolumn_enabled);
|
||||||
// g_signal_connect (G_OBJECT (item), "toggled", G_CALLBACK (pref_toggle_tooltips), 0);
|
create_submenu(menu, "Show two column display", "app.twocolumn", state, app, pref_toggle_twocolumn);
|
||||||
|
|
||||||
// twocolumn submenu:
|
// insert separator:
|
||||||
|
create_submenu(menu, "Save as default settings", "app.save_default", NULL, app, save_defaults_callback);
|
||||||
|
|
||||||
create_item (menu, "Show two column display", "app.two_column", NULL, "Show two column display", NULL);
|
create_submenu(menu, "Load default settings", "app.load_default", NULL, app, load_defaults_callback);
|
||||||
// gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), preferences.twocolumn_enabled);
|
|
||||||
// g_signal_connect (G_OBJECT (item), "toggled", G_CALLBACK (pref_toggle_twocolumn), 0);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
item = gtk_menu_item_new ();
|
item = gtk_menu_item_new ();
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
gtk_container_add (GTK_CONTAINER (menu), item);
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
*/
|
*/
|
||||||
|
create_submenu (menu, "Save settings as...", "app.save", NULL, app, save_as_callback);
|
||||||
|
|
||||||
create_item (menu, "Save as default settings", "app.save_default", NULL, "Save as default settings", NULL);
|
create_submenu (menu, "Load settings from...", "app.load", NULL, app, load_from_callback);
|
||||||
// g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (save_defaults_callback), 0);
|
|
||||||
|
|
||||||
create_item (menu, "Load default settings", "app.load_default", NULL, "Load default settings", NULL);
|
|
||||||
//g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (load_defaults_callback), 0);
|
|
||||||
|
|
||||||
/*
|
|
||||||
item = gtk_menu_item_new ();
|
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
*/
|
|
||||||
create_item (menu, "Specify device name...", "app.save", NULL, "Specify device name...", NULL);
|
|
||||||
// g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (save_as_callback), 0);
|
|
||||||
|
|
||||||
create_item (menu, "Load settings from...", "app.load", NULL, "Load settings from...", NULL);
|
|
||||||
// g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (load_from_callback), 0);
|
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rescan_devices (GtkWidget * widget, gpointer client_data, gpointer call_data)
|
rescan_devices (GSimpleAction *action, GVariant *parameter, gpointer data)
|
||||||
{
|
{
|
||||||
// gtk_widget_destroy (GTK_WIDGET (win.devices.menu));
|
// gtk_widget_destroy (GTK_WIDGET (win.devices.menu));
|
||||||
win.devices.menu = build_device_menu ();
|
win.devices.menu = build_device_menu ();
|
||||||
|
@ -1141,7 +1124,7 @@ input_available (gpointer data, gint source, GIOCondition cond)
|
||||||
{
|
{
|
||||||
if (status == SANE_STATUS_EOF)
|
if (status == SANE_STATUS_EOF)
|
||||||
{
|
{
|
||||||
display_image (&win.canvas);
|
gtk_widget_queue_draw (win.canvas.preview);
|
||||||
stop_camera ();
|
stop_camera ();
|
||||||
if (win.playing)
|
if (win.playing)
|
||||||
{
|
{
|
||||||
|
@ -1585,8 +1568,8 @@ xcam_exit (void)
|
||||||
pref_xcam_save ();
|
pref_xcam_save ();
|
||||||
sane_exit ();
|
sane_exit ();
|
||||||
/* this has the habit of calling exit itself: */
|
/* this has the habit of calling exit itself: */
|
||||||
while (g_list_model_get_n_items (gtk_window_get_toplevels ()) > 0)
|
// g_application_quit(G_APPLICATION(data));
|
||||||
g_main_context_iteration (NULL, TRUE);
|
exit(0);
|
||||||
DBG (DBG_debug, "xcam: xcam_exit: exit\n");
|
DBG (DBG_debug, "xcam: xcam_exit: exit\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1741,8 +1724,9 @@ activate(GApplication *app, gpointer *data) {
|
||||||
gtk_box_append (GTK_BOX (preview_vbox), frame);
|
gtk_box_append (GTK_BOX (preview_vbox), frame);
|
||||||
|
|
||||||
win.canvas.preview = gtk_drawing_area_new ();
|
win.canvas.preview = gtk_drawing_area_new ();
|
||||||
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (win.canvas.preview), 320);
|
gsg_widget_placement(GTK_WIDGET (win.canvas.preview), GTK_ALIGN_FILL, GTK_ALIGN_FILL, 0, 0, 0, 0);
|
||||||
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (win.canvas.preview), 200);
|
// gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (win.canvas.preview), 320);
|
||||||
|
// gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (win.canvas.preview), 200);
|
||||||
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (win.canvas.preview), canvas_events, &(win.canvas), NULL);
|
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (win.canvas.preview), canvas_events, &(win.canvas), NULL);
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), win.canvas.preview);
|
gtk_frame_set_child (GTK_FRAME (frame), win.canvas.preview);
|
||||||
|
|
||||||
|
@ -1795,7 +1779,7 @@ activate(GApplication *app, gpointer *data) {
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
|
||||||
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
|
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
|
||||||
gtk_container_set_border_width (GTK_WIDGET (hbox), 3);
|
gtk_container_set_border_width (GTK_WIDGET (hbox), 3);
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||||
gtk_widget_show (hbox);
|
gtk_widget_show (hbox);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
|
@ -1833,7 +1817,7 @@ activate(GApplication *app, gpointer *data) {
|
||||||
}
|
}
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT (button), "clicked",
|
||||||
G_CALLBACK (txt_button), dialog);
|
G_CALLBACK (txt_button), dialog);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||||
gtk_widget_show (button);
|
gtk_widget_show (button);
|
||||||
DBG (DBG_debug, "xcam main, bottom row: txt button\n");
|
DBG (DBG_debug, "xcam main, bottom row: txt button\n");
|
||||||
|
|
||||||
|
@ -1847,7 +1831,7 @@ activate(GApplication *app, gpointer *data) {
|
||||||
}
|
}
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT (button), "clicked",
|
||||||
G_CALLBACK (rgb_bgr_button), dialog);
|
G_CALLBACK (rgb_bgr_button), dialog);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||||
gtk_widget_show (button);
|
gtk_widget_show (button);
|
||||||
|
|
||||||
DBG (DBG_debug, "xcam main, bottom row: play button\n");
|
DBG (DBG_debug, "xcam main, bottom row: play button\n");
|
||||||
|
@ -1862,7 +1846,7 @@ activate(GApplication *app, gpointer *data) {
|
||||||
}
|
}
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT (button), "clicked",
|
||||||
G_CALLBACK (play_stop_button), dialog);
|
G_CALLBACK (play_stop_button), dialog);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||||
gtk_widget_show (button);
|
gtk_widget_show (button);
|
||||||
|
|
||||||
DBG (DBG_debug, "xcam main, bottom row: save frame button\n");
|
DBG (DBG_debug, "xcam main, bottom row: save frame button\n");
|
||||||
|
@ -1877,7 +1861,7 @@ activate(GApplication *app, gpointer *data) {
|
||||||
}
|
}
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT (button), "clicked",
|
||||||
G_CALLBACK (save_frame_button), dialog);
|
G_CALLBACK (save_frame_button), dialog);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||||
gtk_widget_show (button);
|
gtk_widget_show (button);
|
||||||
|
|
||||||
DBG (DBG_debug, "xcam main, bottom row: output filename part\n");
|
DBG (DBG_debug, "xcam main, bottom row: output filename part\n");
|
||||||
|
@ -1885,7 +1869,7 @@ activate(GApplication *app, gpointer *data) {
|
||||||
/* output filename part */
|
/* output filename part */
|
||||||
frame = gtk_frame_new ("Output");
|
frame = gtk_frame_new ("Output");
|
||||||
gtk_container_set_border_width (GTK_WIDGET (frame), 4);
|
gtk_container_set_border_width (GTK_WIDGET (frame), 4);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
|
gtk_box_pack_end (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
|
||||||
|
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
||||||
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
|
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
|
||||||
|
@ -1893,18 +1877,18 @@ activate(GApplication *app, gpointer *data) {
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), hbox);
|
gtk_frame_set_child (GTK_FRAME (frame), hbox);
|
||||||
|
|
||||||
label = gtk_label_new ("Filename");
|
label = gtk_label_new ("Filename");
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
|
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 2);
|
||||||
|
|
||||||
text = gtk_entry_new ();
|
text = gtk_entry_new ();
|
||||||
gtk_editable_set_text (GTK_EDITABLE (text), (char *) preferences.filename);
|
gtk_editable_set_text (GTK_EDITABLE (text), (char *) preferences.filename);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), text, TRUE, TRUE, 2);
|
gtk_box_pack_end (GTK_BOX (hbox), text, TRUE, TRUE, 2);
|
||||||
g_signal_connect (G_OBJECT (text), "changed",
|
g_signal_connect (G_OBJECT (text), "changed",
|
||||||
G_CALLBACK (filename_changed_callback), 0);
|
G_CALLBACK (filename_changed_callback), 0);
|
||||||
|
|
||||||
win.filename_entry = text;
|
win.filename_entry = text;
|
||||||
|
|
||||||
button = gtk_button_new_with_label ("Browse");
|
button = gtk_button_new_with_label ("Browse");
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 2);
|
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 2);
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT (button), "clicked",
|
||||||
G_CALLBACK (browse_filename_callback), 0);
|
G_CALLBACK (browse_filename_callback), 0);
|
||||||
|
|
||||||
|
@ -1960,7 +1944,13 @@ int main(int argc, char **argv) {
|
||||||
else
|
else
|
||||||
prog_name = argv[0];
|
prog_name = argv[0];
|
||||||
|
|
||||||
app = gtk_application_new("com.scan2vcard", G_APPLICATION_DEFAULT_FLAGS);
|
app = gtk_application_new("com.scan2vcard",
|
||||||
|
#if (GTK_MAJOR_VERSION == 4 && GTK_MINOR_VERSION < 12)
|
||||||
|
G_APPLICATION_FLAGS_NONE
|
||||||
|
#else
|
||||||
|
G_APPLICATION_DEFAULT_FLAGS
|
||||||
|
#endif
|
||||||
|
);
|
||||||
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
|
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
|
||||||
stat = g_application_run(G_APPLICATION(app), argc, argv);
|
stat = g_application_run(G_APPLICATION(app), argc, argv);
|
||||||
g_object_unref(app);
|
g_object_unref(app);
|
||||||
|
|
|
@ -1757,33 +1757,6 @@ pref_toggle_twocolumn (GSimpleAction *action, GVariant *parameter, gpointer data
|
||||||
pref_xscanimage_save ();
|
pref_xscanimage_save ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static GMenu*
|
|
||||||
create_submenu(GMenu *menu, char *label, char *action, GVariant *state, void (*fct_toggle) (GSimpleAction *, GVariant *, gpointer))
|
|
||||||
{
|
|
||||||
GSimpleAction *act;
|
|
||||||
GMenu *section;
|
|
||||||
GMenuItem *menu_item;
|
|
||||||
if (action) {
|
|
||||||
if (state)
|
|
||||||
act = g_simple_action_new_stateful (action + 4, NULL, state);
|
|
||||||
else
|
|
||||||
act = g_simple_action_new (action + 4, NULL);
|
|
||||||
g_action_map_add_action (G_ACTION_MAP (scan_win.app), G_ACTION (act));
|
|
||||||
}
|
|
||||||
if (fct_toggle)
|
|
||||||
g_signal_connect (act, "activate", G_CALLBACK (fct_toggle), scan_win.app);
|
|
||||||
|
|
||||||
section = g_menu_new ();
|
|
||||||
menu_item = g_menu_item_new (label, action);
|
|
||||||
|
|
||||||
g_menu_append_item (section, menu_item);
|
|
||||||
g_object_unref (menu_item);
|
|
||||||
|
|
||||||
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
|
||||||
return section;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GMenu *
|
static GMenu *
|
||||||
pref_build_menu (void)
|
pref_build_menu (void)
|
||||||
{
|
{
|
||||||
|
@ -1797,15 +1770,15 @@ pref_build_menu (void)
|
||||||
|
|
||||||
// advanced user option:
|
// advanced user option:
|
||||||
state = g_variant_new_boolean (preferences.advanced);
|
state = g_variant_new_boolean (preferences.advanced);
|
||||||
create_submenu(menu, "Show advanced options", "app.advanced", state, pref_toggle_advanced);
|
create_submenu(menu, "Show advanced options", "app.advanced", state, scan_win.app, pref_toggle_advanced);
|
||||||
|
|
||||||
// tooltips submenu:
|
// tooltips submenu:
|
||||||
state = g_variant_new_boolean (preferences.advanced);
|
state = g_variant_new_boolean (preferences.tooltips_enabled);
|
||||||
create_submenu(menu, "Show tooltips", "app.tooltips", state, pref_toggle_tooltips);
|
create_submenu(menu, "Show tooltips", "app.tooltips", state, scan_win.app, pref_toggle_tooltips);
|
||||||
|
|
||||||
// two column submenu:
|
// two column submenu:
|
||||||
state = g_variant_new_boolean (preferences.advanced);
|
state = g_variant_new_boolean (preferences.twocolumn_enabled);
|
||||||
create_submenu(menu, "Show two column display", "app.twocolumn", state, pref_toggle_twocolumn);
|
create_submenu(menu, "Show two column display", "app.twocolumn", state, scan_win.app, pref_toggle_twocolumn);
|
||||||
|
|
||||||
state = g_variant_new_string ("none");
|
state = g_variant_new_string ("none");
|
||||||
act = g_simple_action_new_stateful ("unit", G_VARIANT_TYPE_STRING, state);
|
act = g_simple_action_new_stateful ("unit", G_VARIANT_TYPE_STRING, state);
|
||||||
|
@ -1821,11 +1794,11 @@ pref_build_menu (void)
|
||||||
create_item(section, "inches", "app.unit", NULL, "in", NULL);
|
create_item(section, "inches", "app.unit", NULL, "in", NULL);
|
||||||
|
|
||||||
// preview options:
|
// preview options:
|
||||||
create_submenu(menu, "Preview options...", "app.preview", NULL, preview_options_dialog);
|
create_submenu(menu, "Preview options...", "app.preview", NULL, scan_win.app, preview_options_dialog);
|
||||||
|
|
||||||
// insert separator:
|
// insert separator:
|
||||||
create_submenu(menu, "Save device settings", "app.save", NULL, pref_device_save);
|
create_submenu(menu, "Save device settings", "app.save", NULL, scan_win.app, pref_device_save);
|
||||||
create_submenu(menu, "Restore device settings", "app.restore", NULL, pref_device_restore);
|
create_submenu(menu, "Restore device settings", "app.restore", NULL, scan_win.app, pref_device_restore);
|
||||||
|
|
||||||
DBG (DBG_debug, "pref_build_menu: finished\n");
|
DBG (DBG_debug, "pref_build_menu: finished\n");
|
||||||
return menu;
|
return menu;
|
||||||
|
|
Ładowanie…
Reference in New Issue