kopia lustrzana https://gitlab.com/sane-project/frontends
Merge branch '42-gtk3-port-issues' into 'master'
Draft: Resolve "GTK3 port issues" Closes #42 See merge request sane-project/frontends!16merge-requests/16/merge
commit
100a679908
130
src/gtkglue.c
130
src/gtkglue.c
|
@ -248,97 +248,89 @@ gsg_close_dialog_callback (GtkWidget * widget, gpointer data)
|
||||||
gsg_message_dialog_active = 0;
|
gsg_message_dialog_active = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gsg_message (const gchar * title, const gchar * message)
|
|
||||||
{
|
|
||||||
GtkWidget *main_vbox, *label;
|
|
||||||
GtkWidget *button, *message_dialog;
|
|
||||||
|
|
||||||
if (gsg_message_dialog_active)
|
|
||||||
{
|
|
||||||
fprintf (stderr, "%s: %s\n", title, message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
gsg_message_dialog_active = 1;
|
|
||||||
message_dialog = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
||||||
gtk_window_set_position (GTK_WINDOW (message_dialog), GTK_WIN_POS_MOUSE);
|
|
||||||
gtk_window_set_title (GTK_WINDOW (message_dialog), title);
|
|
||||||
|
|
||||||
/* create the main vbox */
|
|
||||||
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
|
||||||
gtk_box_set_homogeneous (GTK_BOX (main_vbox), TRUE);
|
|
||||||
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 5);
|
|
||||||
gtk_widget_show (main_vbox);
|
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (message_dialog), main_vbox);
|
|
||||||
|
|
||||||
/* the message */
|
|
||||||
label = gtk_label_new (message);
|
|
||||||
gtk_container_add (GTK_CONTAINER (main_vbox), label);
|
|
||||||
gtk_widget_show (label);
|
|
||||||
|
|
||||||
/* the confirmation button */
|
|
||||||
button = gtk_button_new_with_label (_("OK"));
|
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
|
||||||
G_CALLBACK (gsg_close_dialog_callback),
|
|
||||||
message_dialog);
|
|
||||||
gtk_container_add (GTK_CONTAINER (main_vbox), button);
|
|
||||||
|
|
||||||
gtk_widget_show (button);
|
|
||||||
gtk_widget_show (message_dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gsg_error (const gchar * error)
|
gsg_error (const gchar * error)
|
||||||
{
|
{
|
||||||
gsg_message ("Error", error);
|
GtkWidget *dialog;
|
||||||
|
|
||||||
|
GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL;
|
||||||
|
dialog = gtk_message_dialog_new (GTK_WINDOW_TOPLEVEL,
|
||||||
|
flags,
|
||||||
|
GTK_MESSAGE_ERROR,
|
||||||
|
GTK_BUTTONS_CLOSE,
|
||||||
|
"%s",
|
||||||
|
error);
|
||||||
|
|
||||||
|
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||||
|
gtk_widget_destroy (dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gsg_warning (const gchar * warning)
|
gsg_warning (const gchar * warning)
|
||||||
{
|
{
|
||||||
gsg_message ("Warning", warning);
|
GtkWidget *dialog;
|
||||||
|
|
||||||
|
GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL;
|
||||||
|
dialog = gtk_message_dialog_new (GTK_WINDOW_TOPLEVEL,
|
||||||
|
flags,
|
||||||
|
GTK_MESSAGE_WARNING,
|
||||||
|
GTK_BUTTONS_CLOSE,
|
||||||
|
"%s",
|
||||||
|
warning);
|
||||||
|
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||||
|
gtk_widget_destroy (dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Execute scan file name dialog.
|
||||||
|
*
|
||||||
|
* Return: -1 = cancel/error, 0 = filename selected.
|
||||||
|
*
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
gsg_get_filename (const char *label, const char *default_name,
|
gsg_get_filename (const char *label, const char *default_name, char **filename, SANE_Bool is_save)
|
||||||
size_t max_len, char *filename)
|
|
||||||
{
|
{
|
||||||
int cancel = 0;
|
SANE_Bool cancel = SANE_TRUE;
|
||||||
GtkWidget *filesel;
|
GtkWidget *filesel;
|
||||||
|
GtkFileChooser *chooser;
|
||||||
|
|
||||||
filesel = gtk_file_chooser_dialog_new ((char*) label, NULL, GTK_FILE_CHOOSER_ACTION_SAVE,
|
DBG (DBG_debug, "gsg_get_filename start, default=[%s]\n", default_name);
|
||||||
_("Ok"), GTK_RESPONSE_ACCEPT,
|
|
||||||
_("Cancel"), GTK_RESPONSE_CANCEL,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
|
filesel = gtk_file_chooser_dialog_new (
|
||||||
|
label, NULL,
|
||||||
|
is_save ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||||
|
"Ok", GTK_RESPONSE_ACCEPT, "Cancel", GTK_RESPONSE_CANCEL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
if (default_name)
|
chooser = GTK_FILE_CHOOSER (filesel);
|
||||||
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (filesel),
|
|
||||||
(char *) default_name);
|
|
||||||
|
|
||||||
if (gtk_dialog_run (GTK_DIALOG (filesel)) == GTK_RESPONSE_ACCEPT)
|
if (is_save)
|
||||||
{
|
{
|
||||||
size_t len, cwd_len;
|
gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
|
||||||
char *cwd;
|
|
||||||
|
|
||||||
strncpy (filename,
|
if (default_name)
|
||||||
gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)),
|
gtk_file_chooser_set_filename (chooser, default_name);
|
||||||
max_len - 1);
|
}
|
||||||
filename[max_len - 1] = '\0';
|
else
|
||||||
|
{
|
||||||
|
if (default_name)
|
||||||
|
gtk_file_chooser_set_current_name (chooser, default_name);
|
||||||
|
|
||||||
len = strlen (filename);
|
}
|
||||||
cwd = alloca (len + 2);
|
|
||||||
if (getcwd (cwd, len + 1) == NULL)
|
if (gtk_dialog_run (GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT)
|
||||||
return -1;
|
{
|
||||||
cwd_len = strlen (cwd);
|
*filename = strdup(gtk_file_chooser_get_filename (chooser));
|
||||||
cwd[cwd_len++] = '/';
|
if (!*filename)
|
||||||
cwd[cwd_len] = '\0';
|
{
|
||||||
if (strncmp (filename, cwd, cwd_len) == 0)
|
DBG (DBG_error, "gsg_get_filename failed to allocate filename.\n");
|
||||||
memcpy (filename, filename + cwd_len, len - cwd_len + 1);
|
}
|
||||||
|
cancel = SANE_FALSE;
|
||||||
}
|
}
|
||||||
gtk_widget_destroy (filesel);
|
gtk_widget_destroy (filesel);
|
||||||
|
|
||||||
|
DBG (DBG_debug, "gsg_get_filename exit\n");
|
||||||
|
|
||||||
return cancel ? -1 : 0;
|
return cancel ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,11 +95,10 @@ extern int gsg_make_path (size_t max_len, char *filename_ret,
|
||||||
const char *prefix, const char *dev_name,
|
const char *prefix, const char *dev_name,
|
||||||
const char *postfix);
|
const char *postfix);
|
||||||
|
|
||||||
extern void gsg_message (const gchar *title, const gchar * message);
|
|
||||||
extern void gsg_error (const gchar * error_message);
|
extern void gsg_error (const gchar * error_message);
|
||||||
extern void gsg_warning (const gchar * warning_message);
|
extern void gsg_warning (const gchar * warning_message);
|
||||||
extern int gsg_get_filename (const char *label, const char *default_name,
|
extern int gsg_get_filename (const char *label, const char *default_name,
|
||||||
size_t max_len, char *filename);
|
char **filename, SANE_Bool is_save);
|
||||||
|
|
||||||
extern GSGDialog *gsg_create_dialog (GtkWidget *window,
|
extern GSGDialog *gsg_create_dialog (GtkWidget *window,
|
||||||
const char *device_name,
|
const char *device_name,
|
||||||
|
|
|
@ -104,11 +104,6 @@ sane_strframe (SANE_Frame f)
|
||||||
(f) == SANE_FRAME_GREEN || \
|
(f) == SANE_FRAME_GREEN || \
|
||||||
(f) == SANE_FRAME_BLUE )
|
(f) == SANE_FRAME_BLUE )
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_ATEXIT
|
|
||||||
# define atexit(func) on_exit(func, 0) /* works for SunOS, at least */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u_char *data;
|
u_char *data;
|
||||||
|
@ -1403,8 +1398,6 @@ main (int argc, char **argv)
|
||||||
int startNum = 1, endNum = -1; /* start/end numbers of pages to scan */
|
int startNum = 1, endNum = -1; /* start/end numbers of pages to scan */
|
||||||
int no_overwrite = 0;
|
int no_overwrite = 0;
|
||||||
|
|
||||||
atexit (sane_exit);
|
|
||||||
|
|
||||||
prog_name = strrchr (argv[0], '/');
|
prog_name = strrchr (argv[0], '/');
|
||||||
if (prog_name)
|
if (prog_name)
|
||||||
++prog_name;
|
++prog_name;
|
||||||
|
@ -1464,7 +1457,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
case 'V':
|
case 'V':
|
||||||
printf ("%s (%s) %s\n", prog_name, PACKAGE, VERSION);
|
printf ("%s (%s) %s\n", prog_name, PACKAGE, VERSION);
|
||||||
exit (0);
|
scanadf_exit (0);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break; /* ignore device specific options for now */
|
break; /* ignore device specific options for now */
|
||||||
|
@ -1726,5 +1719,5 @@ List of available devices:"), prog_name);
|
||||||
if (scriptWait)
|
if (scriptWait)
|
||||||
while (wait(NULL) != -1);
|
while (wait(NULL) != -1);
|
||||||
|
|
||||||
return (status == SANE_STATUS_GOOD) ? 0 : 1;
|
scanadf_exit((status == SANE_STATUS_GOOD) ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
119
src/xcam.c
119
src/xcam.c
|
@ -66,10 +66,6 @@
|
||||||
|
|
||||||
#define MAX_LUM 64 /* how many graylevels for 8 bit displays */
|
#define MAX_LUM 64 /* how many graylevels for 8 bit displays */
|
||||||
|
|
||||||
#ifndef HAVE_ATEXIT
|
|
||||||
# define atexit(func) on_exit(func, 0) /* works for SunOS, at least */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
GtkWidget *spinner;
|
GtkWidget *spinner;
|
||||||
|
@ -89,7 +85,9 @@ Canvas;
|
||||||
static const char *prog_name;
|
static const char *prog_name;
|
||||||
static const SANE_Device **device;
|
static const SANE_Device **device;
|
||||||
static GSGDialog *dialog;
|
static GSGDialog *dialog;
|
||||||
static char device_settings_filename[1024] = "device.rc";
|
static char *device_settings_filename = NULL;
|
||||||
|
|
||||||
|
#define DEFAULT_SETTINGS_FILE "device.rc"
|
||||||
|
|
||||||
#define DBG_fatal 0
|
#define DBG_fatal 0
|
||||||
#define DBG_error 1
|
#define DBG_error 1
|
||||||
|
@ -163,6 +161,8 @@ static void update_param (GSGDialog * dialog, void *arg);
|
||||||
|
|
||||||
static void load_defaults (int silent);
|
static void load_defaults (int silent);
|
||||||
|
|
||||||
|
static void xcam_exit (void);
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"help", no_argument, NULL, 'h'},
|
{"help", no_argument, NULL, 'h'},
|
||||||
{"version", no_argument, NULL, 'V'},
|
{"version", no_argument, NULL, 'V'},
|
||||||
|
@ -689,7 +689,8 @@ exit_callback (GtkWidget * widget, gpointer data)
|
||||||
if (dialog)
|
if (dialog)
|
||||||
gsg_destroy_dialog (dialog);
|
gsg_destroy_dialog (dialog);
|
||||||
dialog = 0;
|
dialog = 0;
|
||||||
exit (0);
|
xcam_exit ();
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -711,20 +712,27 @@ load_defaults_callback (GtkWidget * widget, gpointer data)
|
||||||
static void
|
static void
|
||||||
save_as_callback (GtkWidget * widget, gpointer data)
|
save_as_callback (GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
if (gsg_get_filename ("File to save settings to", device_settings_filename,
|
if (gsg_get_filename (
|
||||||
sizeof (device_settings_filename),
|
"File to save settings to",
|
||||||
device_settings_filename) < 0)
|
device_settings_filename ? device_settings_filename : DEFAULT_SETTINGS_FILE,
|
||||||
|
&device_settings_filename,
|
||||||
|
SANE_TRUE) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
save_settings (device_settings_filename);
|
save_settings (device_settings_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
load_from_callback (GtkWidget * widget, gpointer data)
|
load_from_callback (GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
if (gsg_get_filename
|
|
||||||
("File to load settings from", device_settings_filename,
|
if (gsg_get_filename (
|
||||||
sizeof (device_settings_filename), device_settings_filename) < 0)
|
"File to load settings from",
|
||||||
|
device_settings_filename ? device_settings_filename : DEFAULT_SETTINGS_FILE,
|
||||||
|
&device_settings_filename,
|
||||||
|
SANE_FALSE) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
load_settings (device_settings_filename, 0);
|
load_settings (device_settings_filename, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,10 +775,6 @@ build_files_menu (void)
|
||||||
|
|
||||||
menu = gtk_menu_new ();
|
menu = gtk_menu_new ();
|
||||||
|
|
||||||
item = gtk_menu_item_new ();
|
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
|
|
||||||
item = gtk_menu_item_new_with_label ("Exit");
|
item = gtk_menu_item_new_with_label ("Exit");
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
gtk_container_add (GTK_CONTAINER (menu), item);
|
||||||
g_signal_connect (G_OBJECT (item), "activate",
|
g_signal_connect (G_OBJECT (item), "activate",
|
||||||
|
@ -795,23 +799,6 @@ device_activate_callback (GtkWidget * widget, gpointer data)
|
||||||
g_idle_add (delayed_switch, data);
|
g_idle_add (delayed_switch, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
xcam_exit (void)
|
|
||||||
{
|
|
||||||
static int active = 0;
|
|
||||||
|
|
||||||
DBG (DBG_debug, "xcam: xcam_exit: enter\n");
|
|
||||||
if (active)
|
|
||||||
return;
|
|
||||||
|
|
||||||
active = 1;
|
|
||||||
pref_xcam_save ();
|
|
||||||
sane_exit ();
|
|
||||||
/* this has the habit of calling exit itself: */
|
|
||||||
gtk_main_quit ();
|
|
||||||
DBG (DBG_debug, "xcam: xcam_exit: exit\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean on_scan_finished(gpointer data) {
|
static gboolean on_scan_finished(gpointer data) {
|
||||||
ScanUI *ui = (ScanUI *)data;
|
ScanUI *ui = (ScanUI *)data;
|
||||||
GtkWidget *menu, *item;
|
GtkWidget *menu, *item;
|
||||||
|
@ -828,7 +815,7 @@ static gboolean on_scan_finished(gpointer data) {
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
}
|
}
|
||||||
|
|
||||||
item = gtk_menu_item_new ();
|
item = gtk_separator_menu_item_new ();
|
||||||
gtk_container_add (GTK_CONTAINER (ui->menu), item);
|
gtk_container_add (GTK_CONTAINER (ui->menu), item);
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
|
|
||||||
|
@ -990,7 +977,7 @@ build_preferences_menu (GSGDialog * dialog)
|
||||||
g_signal_connect (G_OBJECT (item), "toggled",
|
g_signal_connect (G_OBJECT (item), "toggled",
|
||||||
G_CALLBACK (pref_toggle_twocolumn), 0);
|
G_CALLBACK (pref_toggle_twocolumn), 0);
|
||||||
|
|
||||||
item = gtk_menu_item_new ();
|
item = gtk_separator_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);
|
||||||
|
|
||||||
|
@ -1006,7 +993,7 @@ build_preferences_menu (GSGDialog * dialog)
|
||||||
G_CALLBACK (load_defaults_callback), 0);
|
G_CALLBACK (load_defaults_callback), 0);
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
|
|
||||||
item = gtk_menu_item_new ();
|
item = gtk_separator_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);
|
||||||
|
|
||||||
|
@ -1650,6 +1637,26 @@ save_frame (void)
|
||||||
DBG (DBG_debug, "xcam: save_frame: exit\n");
|
DBG (DBG_debug, "xcam: save_frame: exit\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xcam_exit (void)
|
||||||
|
{
|
||||||
|
static int active = 0;
|
||||||
|
|
||||||
|
DBG (DBG_debug, "xcam: xcam_exit: enter\n");
|
||||||
|
if (active)
|
||||||
|
return;
|
||||||
|
|
||||||
|
active = 1;
|
||||||
|
pref_xcam_save ();
|
||||||
|
sane_exit ();
|
||||||
|
/* this has the habit of calling exit itself: */
|
||||||
|
gtk_main_quit ();
|
||||||
|
|
||||||
|
free(device_settings_filename);
|
||||||
|
|
||||||
|
DBG (DBG_debug, "xcam: xcam_exit: exit\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* Invoked when window manager's "delete" (or "close") function is
|
/* Invoked when window manager's "delete" (or "close") function is
|
||||||
invoked. */
|
invoked. */
|
||||||
static gint
|
static gint
|
||||||
|
@ -1662,23 +1669,22 @@ xcam_win_delete (GtkWidget * w, gpointer data)
|
||||||
static void
|
static void
|
||||||
browse_filename_callback (GtkWidget * widget, gpointer data)
|
browse_filename_callback (GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
char filename[1024];
|
char *filename = NULL;
|
||||||
|
|
||||||
DBG (DBG_debug, "xcam: browse_filename_callback\n");
|
DBG (DBG_debug, "browse_filename_callback\n");
|
||||||
if (preferences.filename)
|
|
||||||
|
if (gsg_get_filename (
|
||||||
|
"Output Filename",
|
||||||
|
preferences.filename ? preferences.filename : OUTFILENAME, &filename,
|
||||||
|
SANE_TRUE) == 0)
|
||||||
{
|
{
|
||||||
strncpy (filename, preferences.filename, sizeof (filename));
|
gtk_entry_set_text (GTK_ENTRY (win.filename_entry), filename);
|
||||||
filename[sizeof (filename) - 1] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
strcpy (filename, OUTFILENAME);
|
|
||||||
gsg_get_filename (_("Output Filename"), filename, sizeof (filename), filename);
|
|
||||||
gtk_entry_set_text (GTK_ENTRY (win.filename_entry), filename);
|
|
||||||
|
|
||||||
if (preferences.filename)
|
if (preferences.filename)
|
||||||
free ((void *) preferences.filename);
|
free ((void *) preferences.filename);
|
||||||
preferences.filename = strdup (filename);
|
preferences.filename = filename;
|
||||||
DBG (DBG_debug, "xcam: browse_filename_callback: exit\n");
|
}
|
||||||
|
DBG (DBG_debug, "browse_filename_callback: finished\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1741,7 +1747,8 @@ main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
DBG (DBG_fatal, "init: sane_main failed: %s\n",
|
DBG (DBG_fatal, "init: sane_main failed: %s\n",
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
exit (1);
|
xcam_exit();
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
|
@ -1753,15 +1760,18 @@ main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
case 'V':
|
case 'V':
|
||||||
printf ("xcam (%s) %s\n", PACKAGE, VERSION);
|
printf ("xcam (%s) %s\n", PACKAGE, VERSION);
|
||||||
exit (0);
|
xcam_exit();
|
||||||
|
exit(0);
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
win.buf_backend_size = 1024 * 1024;
|
win.buf_backend_size = 1024 * 1024;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
default:
|
||||||
usage ();
|
usage ();
|
||||||
exit (0);
|
xcam_exit();
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1774,8 +1784,6 @@ main (int argc, char **argv)
|
||||||
gdk_set_show_events (0);
|
gdk_set_show_events (0);
|
||||||
gtk_init (&argc, &argv);
|
gtk_init (&argc, &argv);
|
||||||
|
|
||||||
atexit (xcam_exit);
|
|
||||||
|
|
||||||
win.gdk_input_tag = -1;
|
win.gdk_input_tag = -1;
|
||||||
win.shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
win.shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_title (GTK_WINDOW (win.shell), (char *) prog_name);
|
gtk_window_set_title (GTK_WINDOW (win.shell), (char *) prog_name);
|
||||||
|
@ -1986,5 +1994,6 @@ main (int argc, char **argv)
|
||||||
pref_xcam_save ();
|
pref_xcam_save ();
|
||||||
|
|
||||||
DBG (DBG_debug, "xcam main exit\n");
|
DBG (DBG_debug, "xcam main exit\n");
|
||||||
|
xcam_exit();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1205,6 +1205,7 @@ scan_start (void)
|
||||||
snprintf (buf, sizeof (buf), _("Failed to start scanner: %s"),
|
snprintf (buf, sizeof (buf), _("Failed to start scanner: %s"),
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
gsg_error (buf);
|
gsg_error (buf);
|
||||||
|
scan_done ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1473,11 +1474,7 @@ files_build_menu (void)
|
||||||
DBG (DBG_debug, "files_build_menu\n");
|
DBG (DBG_debug, "files_build_menu\n");
|
||||||
menu = gtk_menu_new ();
|
menu = gtk_menu_new ();
|
||||||
|
|
||||||
item = gtk_menu_item_new ();
|
item = gtk_menu_item_new_with_label ("Exit");
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
|
||||||
gtk_widget_show (item);
|
|
||||||
|
|
||||||
item = gtk_menu_item_new_with_label (_("Exit"));
|
|
||||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
gtk_container_add (GTK_CONTAINER (menu), item);
|
||||||
g_signal_connect (G_OBJECT (item), "activate",
|
g_signal_connect (G_OBJECT (item), "activate",
|
||||||
G_CALLBACK (files_exit_callback), 0);
|
G_CALLBACK (files_exit_callback), 0);
|
||||||
|
@ -1815,7 +1812,7 @@ pref_build_menu (void)
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
|
|
||||||
/* insert separator: */
|
/* insert separator: */
|
||||||
item = gtk_menu_item_new ();
|
item = gtk_separator_menu_item_new ();
|
||||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
||||||
gtk_widget_show (item);
|
gtk_widget_show (item);
|
||||||
|
|
||||||
|
@ -1838,22 +1835,18 @@ pref_build_menu (void)
|
||||||
static void
|
static void
|
||||||
browse_filename_callback (GtkWidget * widget, gpointer data)
|
browse_filename_callback (GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
char filename[1024];
|
char *filename = NULL;
|
||||||
|
|
||||||
DBG (DBG_debug, "browse_filename_callback\n");
|
DBG (DBG_debug, "browse_filename_callback\n");
|
||||||
if (preferences.filename)
|
|
||||||
{
|
|
||||||
strncpy (filename, preferences.filename, sizeof (filename));
|
|
||||||
filename[sizeof (filename) - 1] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
strcpy (filename, OUTFILENAME);
|
|
||||||
gsg_get_filename ("Output Filename", filename, sizeof (filename), filename);
|
|
||||||
gtk_entry_set_text (GTK_ENTRY (scan_win.filename_entry), filename);
|
|
||||||
|
|
||||||
if (preferences.filename)
|
if (gsg_get_filename ("Output Filename", preferences.filename? preferences.filename: OUTFILENAME, &filename, SANE_TRUE) == 0)
|
||||||
free ((void *) preferences.filename);
|
{
|
||||||
preferences.filename = strdup (filename);
|
gtk_entry_set_text (GTK_ENTRY (scan_win.filename_entry), filename);
|
||||||
|
|
||||||
|
if (preferences.filename)
|
||||||
|
free ((void *) preferences.filename);
|
||||||
|
preferences.filename = filename;
|
||||||
|
}
|
||||||
DBG (DBG_debug, "browse_filename_callback: finished\n");
|
DBG (DBG_debug, "browse_filename_callback: finished\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue