Readd previous functions and fix device search

merge-requests/14/head
Ordissimo 2024-10-25 19:20:45 +02:00
rodzic 96d99e4a79
commit afb72fcba6
1 zmienionych plików z 129 dodań i 88 usunięć

Wyświetl plik

@ -52,6 +52,7 @@
#include "progress.h" #include "progress.h"
#include "preferences.h" #include "preferences.h"
#include "preview.h" #include "preview.h"
#include "../libgtk/utils-gtk.h"
#ifndef PATH_MAX #ifndef PATH_MAX
# define PATH_MAX 1024 # define PATH_MAX 1024
@ -87,6 +88,8 @@
# endif /* ENABLE_GIMP_1_2 */ # endif /* ENABLE_GIMP_1_2 */
# endif # endif
static GtkApplication *app = NULL;
static void query (void); static void query (void);
#ifndef ENABLE_GIMP_1_2 #ifndef ENABLE_GIMP_1_2
static void run (const gchar * name, gint nparams, const GimpParam * param, static void run (const gchar * name, gint nparams, const GimpParam * param,
@ -119,7 +122,7 @@ enum
struct scan_win_t struct scan_win_t
{ {
GtkWidget *shell; GtkWidget *shell;
GtkWidget *menubar; GMenu *menubar;
GtkWidget *hruler; GtkWidget *hruler;
GtkWidget *vruler; GtkWidget *vruler;
GtkWidget *info_label; GtkWidget *info_label;
@ -154,7 +157,7 @@ struct scan_win_t
scan_win; scan_win;
static const char *prog_name; static const char *prog_name;
static GtkWidget *choose_device_dialog; static GtkWidget *choose_device_dialog = NULL;
static GSGDialog *dialog; static GSGDialog *dialog;
static const SANE_Device **devlist; static const SANE_Device **devlist;
static gint seldev = -1; /* The selected device */ static gint seldev = -1; /* The selected device */
@ -1013,7 +1016,8 @@ scan_done (void)
if (scan_win.preview) if (scan_win.preview)
gtk_widget_set_sensitive (scan_win.preview->preview, TRUE); gtk_widget_set_sensitive (scan_win.preview->preview, TRUE);
gtk_widget_set_sensitive (scan_win.scan_button, TRUE); gtk_widget_set_sensitive (scan_win.scan_button, TRUE);
gtk_widget_set_sensitive (scan_win.menubar, TRUE); // gtk_widget_set_sensitive (scan_win.menubar, TRUE);
if (scan_win.input_tag >= 0) if (scan_win.input_tag >= 0)
{ {
@ -1091,7 +1095,7 @@ scan_start (void)
if (scan_win.preview) if (scan_win.preview)
gtk_widget_set_sensitive (scan_win.preview->preview, FALSE); gtk_widget_set_sensitive (scan_win.preview->preview, FALSE);
gtk_widget_set_sensitive (scan_win.scan_button, FALSE); gtk_widget_set_sensitive (scan_win.scan_button, FALSE);
gtk_widget_set_sensitive (scan_win.menubar, FALSE); // gtk_widget_set_sensitive (scan_win.menubar, FALSE);
#ifdef HAVE_LIBGIMP_GIMP_H #ifdef HAVE_LIBGIMP_GIMP_H
if (scan_win.mode == SANE_GIMP_EXTENSION && scan_win.tile) if (scan_win.mode == SANE_GIMP_EXTENSION && scan_win.tile)
@ -1450,24 +1454,29 @@ files_exit_callback (GtkWidget * widget, gpointer data)
quit_xscanimage (); quit_xscanimage ();
} }
static GtkWidget * static GMenu *
files_build_menu (void) files_build_menu (void)
{ {
GtkWidget *menu; //, *item; GMenu *menu; //, *item;
GMenu *section;
GMenuItem *menu_item_quit;
DBG (DBG_debug, "files_build_menu\n"); DBG (DBG_debug, "files_build_menu\n");
/*
menu = gtk_menu_new ();
item = gtk_menu_item_new (); // GSimpleAction *act_quit = g_simple_action_new ("quit", NULL);
gtk_container_add (GTK_CONTAINER (menu), item); // g_signal_connect_swapped (act_quit, "activate", G_CALLBACK (files_exit_callback), NULL);
gtk_widget_show (item); // g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (act_quit));
item = gtk_menu_item_new_with_label ("Exit"); menu = g_menu_new ();
gtk_container_add (GTK_CONTAINER (menu), item);
g_signal_connect (G_OBJECT (item), "activate", section = g_menu_new ();
G_CALLBACK (files_exit_callback), 0); menu_item_quit = g_menu_item_new ("Exit", "app.quit");
gtk_widget_show (item);
*/ g_menu_append_item (section, menu_item_quit);
g_object_unref (menu_item_quit);
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
g_object_unref (menu_item_quit);
DBG (DBG_debug, "files_build_menu: finished\n"); DBG (DBG_debug, "files_build_menu: finished\n");
return menu; return menu;
} }
@ -1575,14 +1584,14 @@ preview_options_dialog (GtkWidget * widget, gpointer data)
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);
gtk_box_append (GTK_BOX (vbox), hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
button = gtk_check_button_new_with_label ("Preserve preview image"); button = gtk_check_button_new_with_label ("Preserve preview image");
g_signal_connect (G_OBJECT (button), "toggled", g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (update_int_callback), G_CALLBACK (update_int_callback),
&preferences.preserve_preview); &preferences.preserve_preview);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), gtk_check_button_set_active(GTK_CHECK_BUTTON(button),
preferences.preserve_preview); preferences.preserve_preview);
gtk_box_append (GTK_BOX (hbox), button); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
gtk_widget_show (button); gtk_widget_show (button);
gtk_widget_show (hbox); gtk_widget_show (hbox);
@ -1591,14 +1600,14 @@ preview_options_dialog (GtkWidget * widget, gpointer data)
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);
gtk_box_append (GTK_BOX (vbox), hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
button = gtk_check_button_new_with_label ("Use private colormap"); button = gtk_check_button_new_with_label ("Use private colormap");
g_signal_connect (G_OBJECT (button), "toggled", g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (update_int_callback), G_CALLBACK (update_int_callback),
&preferences.preview_own_cmap); &preferences.preview_own_cmap);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), gtk_check_button_set_active(GTK_CHECK_BUTTON (button),
preferences.preview_own_cmap); preferences.preview_own_cmap);
gtk_box_append (GTK_BOX (hbox), button); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
gtk_widget_show (button); gtk_widget_show (button);
gtk_widget_show (hbox); gtk_widget_show (hbox);
@ -1607,18 +1616,17 @@ preview_options_dialog (GtkWidget * widget, gpointer data)
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);
gtk_box_append (GTK_BOX (vbox), hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
gtk_widget_show (hbox); gtk_widget_show (hbox);
label = gtk_label_new ("Gamma correction value"); label = gtk_label_new ("Gamma correction value");
gtk_box_append (GTK_BOX (hbox), label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
gtk_widget_show (label); gtk_widget_show (label);
sprintf (buf, "%g", preferences.preview_gamma); sprintf (buf, "%g", preferences.preview_gamma);
text = gtk_entry_new (); text = gtk_entry_new ();
gtk_editable_set_text (GTK_EDITABLE (text), buf); gtk_editable_set_text (GTK_EDITABLE (text), buf);
gtk_box_pack_start (GTK_BOX (hbox), text, TRUE, TRUE, 2);
gtk_box_append (GTK_BOX (hbox), text);
g_signal_connect (G_OBJECT (text), "changed", g_signal_connect (G_OBJECT (text), "changed",
G_CALLBACK (update_double_callback), G_CALLBACK (update_double_callback),
&preferences.preview_gamma); &preferences.preview_gamma);
@ -1716,10 +1724,16 @@ pref_toggle_twocolumn (GtkWidget * widget, gpointer data)
*/ */
} }
static GtkWidget * static GMenu *
pref_build_menu (void) pref_build_menu (void)
{ {
GtkWidget *menu; // , *item, *submenu; GMenu *menu; // , *item, *submenu;
DBG (DBG_debug, "pref_build_menu\n");
menu = g_menu_new ();
// g_object_unref (section);
return menu;
/* /*
GtkWidget *unit_mm, *unit_cm, *unit_in; GtkWidget *unit_mm, *unit_cm, *unit_in;
GSList *units_group = NULL; GSList *units_group = NULL;
@ -1867,7 +1881,6 @@ device_dialog (void)
devname = devlist[seldev]->name; devname = devlist[seldev]->name;
/* create the dialog box */ /* create the dialog box */
scan_win.shell = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (scan_win.shell), (char *) devname); gtk_window_set_title (GTK_WINDOW (scan_win.shell), (char *) devname);
gtk_window_set_resizable (GTK_WINDOW (scan_win.shell), TRUE); gtk_window_set_resizable (GTK_WINDOW (scan_win.shell), TRUE);
gtk_window_set_default_size (GTK_WINDOW (scan_win.shell), 400, 400); gtk_window_set_default_size (GTK_WINDOW (scan_win.shell), 400, 400);
@ -1875,12 +1888,12 @@ device_dialog (void)
G_CALLBACK (scan_win_delete), NULL); G_CALLBACK (scan_win_delete), NULL);
/* create the main vbox */ /* create the main vbox */
vbox = gtk_dialog_get_content_area(GTK_DIALOG (scan_win.shell)); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
if (GTK_IS_WINDOW(scan_win.shell))
/* create the menubar */ gtk_window_set_child(GTK_WINDOW(scan_win.shell), vbox);
else
// scan_win.menubar = gtk_menu_bar_new (); g_message("%d) %s\n", __LINE__, __FUNCTION__);
gtk_box_append (GTK_BOX (vbox), scan_win.menubar);
/* "Files" submenu: */ /* "Files" submenu: */
/* /*
@ -1890,6 +1903,7 @@ device_dialog (void)
files_build_menu ()); files_build_menu ());
gtk_widget_show (menubar_item); gtk_widget_show (menubar_item);
*/ */
g_menu_append_submenu (scan_win.menubar, "File", G_MENU_MODEL (files_build_menu ()));
/* "Preferences" submenu: */ /* "Preferences" submenu: */
/* /*
@ -1899,6 +1913,7 @@ device_dialog (void)
pref_build_menu ()); pref_build_menu ());
gtk_widget_show (menubar_item); gtk_widget_show (menubar_item);
*/ */
g_menu_append_submenu (scan_win.menubar, "Preferences", G_MENU_MODEL (pref_build_menu ()));
// gtk_widget_show (scan_win.menubar); // gtk_widget_show (scan_win.menubar);
@ -1907,7 +1922,7 @@ device_dialog (void)
{ {
frame = gtk_frame_new ("Output"); frame = gtk_frame_new ("Output");
// gtk_container_set_border_width (GTK_CONTAINER (frame), 4); // gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
gtk_box_append (GTK_BOX (vbox), frame); gtk_box_pack_start (GTK_BOX (vbox), 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);
@ -1915,18 +1930,18 @@ device_dialog (void)
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_append (GTK_BOX (hbox), label); gtk_box_pack_start (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_append (GTK_BOX (hbox), text); gtk_box_pack_start (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);
scan_win.filename_entry = text; scan_win.filename_entry = text;
button = gtk_button_new_with_label ("Browse"); button = gtk_button_new_with_label ("Browse");
gtk_box_append (GTK_BOX (hbox), button); gtk_box_pack_start (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);
@ -1945,9 +1960,9 @@ device_dialog (void)
GTK_CORNER_TOP_RIGHT); GTK_CORNER_TOP_RIGHT);
dialog_window = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); dialog_window = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_set_homogeneous (GTK_BOX (dialog_window), FALSE); gtk_box_set_homogeneous (GTK_BOX (dialog_window), FALSE);
gtk_window_set_child(GTK_WINDOW (scrolled_window), dialog_window); gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW (scrolled_window), dialog_window);
gtk_box_append (GTK_BOX (vbox), scrolled_window); gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
gtk_widget_show (scrolled_window); gtk_widget_show (scrolled_window);
gtk_widget_show (dialog_window); gtk_widget_show (dialog_window);
@ -1959,35 +1974,39 @@ device_dialog (void)
/* The info row */ /* The info row */
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
// gtk_container_set_border_width (GTK_CONTAINER (hbox), 3); gtk_container_set_border_width (GTK_WIDGET (hbox), 3);
gtk_box_append (GTK_BOX (vbox), hbox); gtk_box_pack_start (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);
gtk_box_append (GTK_BOX (hbox), frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame); gtk_widget_show (frame);
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_CONTAINER (hbox), 2); gtk_container_set_border_width (GTK_WIDGET (hbox), 2);
gtk_frame_set_child(GTK_FRAME (frame), hbox); gtk_frame_set_child (GTK_FRAME (frame), hbox);
gtk_widget_show (hbox); gtk_widget_show (hbox);
scan_win.info_label = gtk_label_new ("0x0: 0KB"); scan_win.info_label = gtk_label_new ("0x0: 0KB");
gtk_box_append (GTK_BOX (hbox), scan_win.info_label); gtk_box_pack_start (GTK_BOX (hbox), scan_win.info_label, FALSE, FALSE, 0);
gtk_widget_show (scan_win.info_label); gtk_widget_show (scan_win.info_label);
update_param (dialog, 0); update_param (dialog, 0);
GtkWidget *bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
/* The Scan button */ /* The Scan button */
scan_win.scan_button = gtk_dialog_add_button (GTK_DIALOG (scan_win.shell), "Scan", GTK_RESPONSE_OK); scan_win.scan_button = gtk_button_new_with_label("Scan");
gtk_box_pack_start (GTK_BOX (bbox), scan_win.scan_button, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (scan_win.scan_button), "clicked", g_signal_connect (G_OBJECT (scan_win.scan_button), "clicked",
G_CALLBACK (scan_dialog), scan_win.shell); G_CALLBACK (scan_dialog), scan_win.shell);
gtk_widget_show (scan_win.scan_button); gtk_widget_show (scan_win.scan_button);
/* The Preview button */ /* The Preview button */
scan_win.preview_button = gtk_dialog_add_button (GTK_DIALOG (scan_win.shell), "Preview Window", GTK_RESPONSE_ACCEPT); scan_win.preview_button = gtk_button_new_with_label("Preview Window");
gtk_box_pack_start (GTK_BOX (bbox), scan_win.preview_button, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (scan_win.preview_button), "clicked", g_signal_connect (G_OBJECT (scan_win.preview_button), "clicked",
G_CALLBACK (scan_preview), scan_win.shell); G_CALLBACK (scan_preview), scan_win.shell);
gtk_widget_show (scan_win.preview_button); gtk_widget_show (scan_win.preview_button);
@ -2007,14 +2026,14 @@ device_dialog (void)
#endif #endif
pref_device_restore (); /* restore device-settings */ pref_device_restore (); /* restore device-settings */
gtk_widget_show (scan_win.shell); gtk_window_present(GTK_WINDOW(scan_win.shell));
DBG (DBG_debug, "device_dialog: finished\n"); DBG (DBG_debug, "device_dialog: finished\n");
} }
static void static void
ok_choose_dialog_callback (void) ok_choose_dialog_callback (void)
{ {
gtk_window_destroy (GTK_WINDOW(choose_device_dialog)); gtk_widget_hide (GTK_WIDGET(choose_device_dialog));
device_dialog (); device_dialog ();
} }
@ -2025,83 +2044,88 @@ select_device_callback (GtkWidget * widget, gpointer data)
} }
static void static void
group_change_callback (GtkToggleButton* button, gpointer data) group_change_callback (GtkCheckButton* button, gpointer data)
{ {
if (gtk_toggle_button_get_active(button)) if (gtk_check_button_get_active(button))
{ {
seldev = (long) data; seldev = (long) data;
} }
} }
static gint32 static gint
choose_device (void) choose_device (void)
{ {
GtkWidget *main_vbox, *vbox, *button, *group = NULL; GtkWidget *main_vbox, *vbox, *bbox, *button, *group = NULL;
const SANE_Device *adev; const SANE_Device *adev;
gint i; gint i;
DBG (DBG_debug, "choose_device\n"); DBG (DBG_debug, "choose_device\n");
choose_device_dialog = gtk_dialog_new (); choose_device_dialog = scan_win.shell;
gtk_window_set_title (GTK_WINDOW (choose_device_dialog), "Select device"); gtk_window_set_title (GTK_WINDOW (choose_device_dialog), "Select device");
g_signal_connect (G_OBJECT (choose_device_dialog), "delete_event", gtk_window_set_modal (GTK_WINDOW (choose_device_dialog), TRUE);
G_CALLBACK (files_exit_callback), NULL); // g_signal_connect (G_OBJECT (choose_device_dialog), "delete_event", G_CALLBACK (files_exit_callback), NULL);
main_vbox = gtk_dialog_get_content_area(GTK_DIALOG (choose_device_dialog));
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
if (GTK_IS_WINDOW(choose_device_dialog))
gtk_window_set_child (GTK_WINDOW (choose_device_dialog), main_vbox);
else
g_message("%d) %s\n", __LINE__, __FUNCTION__);
/* The list of drivers */ /* The list of drivers */
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE);
// gtk_container_set_border_width (GTK_CONTAINER (vbox), 3); gtk_container_set_border_width (GTK_WIDGET (vbox), 3);
gtk_box_append (GTK_BOX (main_vbox), vbox); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
gtk_widget_show (vbox); gtk_widget_show (vbox);
/* The radio buttons */ /* The radio buttons */
button = NULL; button = NULL;
group = NULL;
for (i = 0; i < ndevs; i++) for (i = 0; i < ndevs; i++)
{ {
adev = devlist[i]; adev = devlist[i];
button = gtk_check_button_new_with_label ((char *) adev->name);
if (button == NULL) if (group == NULL)
{ {
button = gtk_check_button_new_with_label ((char *) adev->name);
group = button; group = button;
} }
/*
else else
{ {
gtk_check_button_set_label( GTK_CHECK_BUTTON(button), adev->name ); gtk_check_button_set_group (GTK_CHECK_BUTTON (button), GTK_CHECK_BUTTON (group));
group = button; }
}*/ /*
g_signal_connect (G_OBJECT (button), "clicked", g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (select_device_callback), G_CALLBACK (select_device_callback),
(void *) (long) i); (void *) (long) i);
*/
g_signal_connect (G_OBJECT (button), "toggled", g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (group_change_callback), G_CALLBACK (group_change_callback),
(void *) (long) i); (void *) (long) i);
gtk_box_append (GTK_BOX (vbox), button); gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
gtk_widget_show (button); gtk_widget_show (button);
if (i == defdev) { if (i == defdev) {
gtk_check_button_set_group (GTK_CHECK_BUTTON (button), GTK_CHECK_BUTTON (group)); gtk_check_button_set_active(GTK_CHECK_BUTTON(button), TRUE);
gtk_check_button_set_active (GTK_CHECK_BUTTON (group), TRUE);
} }
} }
bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_pack_start (GTK_BOX (main_vbox), bbox, FALSE, TRUE, 0);
/* The OK button */ /* The OK button */
button = gtk_dialog_add_button (GTK_DIALOG (choose_device_dialog), "OK", GTK_RESPONSE_OK); button = gtk_button_new_with_label ("Ok");
gtk_window_set_default_widget (GTK_WINDOW (choose_device_dialog), button); gtk_window_set_default_widget (GTK_WINDOW (choose_device_dialog), button);
g_signal_connect (G_OBJECT (button), "clicked", g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (ok_choose_dialog_callback), NULL); G_CALLBACK (ok_choose_dialog_callback), NULL);
gtk_widget_show (button); gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0);
/* The Cancel button */ /* The Cancel button */
button = gtk_dialog_add_button (GTK_DIALOG (choose_device_dialog), "Cancel", GTK_RESPONSE_OK); button = gtk_button_new_with_label ("Cancel");
g_signal_connect (G_OBJECT (button), "clicked", g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (files_exit_callback), NULL); G_CALLBACK (files_exit_callback), NULL);
gtk_widget_show (button); gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0);
gtk_widget_show (choose_device_dialog); gtk_window_present(GTK_WINDOW(choose_device_dialog));
DBG (DBG_debug, "choose_device: finished\n"); DBG (DBG_debug, "choose_device: finished\n");
return 0; return 0;
} }
@ -2124,11 +2148,11 @@ init (int argc, char **argv)
//char filename[PATH_MAX]; //char filename[PATH_MAX];
//struct stat st; //struct stat st;
SANE_Status status; SANE_Status status;
scan_win.info_label = NULL;
DBG_INIT (); DBG_INIT ();
DBG (DBG_debug, "init\n"); DBG (DBG_debug, "init\n");
gtk_init ();
/* /*
#ifdef HAVE_LIBGIMP_GIMP_H #ifdef HAVE_LIBGIMP_GIMP_H
gtk_rc_parse (gimp_gtkrc ()); gtk_rc_parse (gimp_gtkrc ());
@ -2228,13 +2252,8 @@ init (int argc, char **argv)
} }
static void static void
interface (int argc, char **argv) interface_app (void)
{ {
scan_win.info_label = NULL;
DBG (DBG_debug, "interface\n");
init (argc, argv);
for (ndevs = 0; devlist[ndevs]; ++ndevs); for (ndevs = 0; devlist[ndevs]; ++ndevs);
if (seldev >= 0) if (seldev >= 0)
@ -2282,6 +2301,25 @@ interface (int argc, char **argv)
DBG (DBG_debug, "interface: finished\n"); DBG (DBG_debug, "interface: finished\n");
} }
static void
interface (int argc, char **argv)
{
DBG (DBG_debug, "interface\n");
init (argc, argv);
interface_app ();
}
static void
activate(GApplication *app, gpointer *data) {
/* create the menubar */
scan_win.menubar = g_menu_new ();
scan_win.shell = gtk_application_window_new(GTK_APPLICATION(app));
interface_app ();
gtk_application_set_menubar (GTK_APPLICATION (app), G_MENU_MODEL (scan_win.menubar));
gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(gtk_application_window_new(GTK_APPLICATION(app))), TRUE);
}
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
@ -2323,12 +2361,15 @@ main (int argc, char **argv)
# endif /* !ENABLE_GIMP_1_2 */ # endif /* !ENABLE_GIMP_1_2 */
g_set_print_handler (old_print_func); g_set_print_handler (old_print_func);
g_set_printerr_handler (old_printerr_func); g_set_printerr_handler (old_printerr_func);
if (result) if (!result)
interface (argc, argv); exit(-1);
} }
#else
interface (argc, argv);
#endif /* HAVE_LIBGIMP_GIMP_H */ #endif /* HAVE_LIBGIMP_GIMP_H */
init (argc, argv);
app = gtk_application_new("com.scan2vcard", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
DBG (DBG_debug, "main: finished\n"); DBG (DBG_debug, "main: finished\n");
return 0; return 0;
} }