From f810fee45f72dfd879fc57259956d7b48725cc5f Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Thu, 29 Nov 2007 16:05:04 +0000 Subject: [PATCH] make EULA, license dialogs be viewable on 800x600 displays --- xsane-0.995-eula-license-size.patch | 421 ++++++++++++++++++++++++++++ xsane.spec | 9 +- 2 files changed, 428 insertions(+), 2 deletions(-) create mode 100644 xsane-0.995-eula-license-size.patch diff --git a/xsane-0.995-eula-license-size.patch b/xsane-0.995-eula-license-size.patch new file mode 100644 index 0000000..63648ab --- /dev/null +++ b/xsane-0.995-eula-license-size.patch @@ -0,0 +1,421 @@ +diff -up xsane-0.995/src/xsane-front-gtk.c.eula-license-size xsane-0.995/src/xsane-front-gtk.c +--- xsane-0.995/src/xsane-front-gtk.c.eula-license-size 2007-05-17 15:35:06.000000000 +0200 ++++ xsane-0.995/src/xsane-front-gtk.c 2007-11-29 16:57:15.000000000 +0100 +@@ -1881,6 +1881,73 @@ void xsane_change_working_directory(void + + /* ---------------------------------------------------------------------------------------------------------------------- */ + ++static GtkWidget *xsane_eula_license_textbox (gchar *text) ++{ ++ GtkWidget *hbox = gtk_hbox_new(FALSE, 2); ++ ++#ifdef HAVE_GTK_TEXT_VIEW_H ++ GtkWidget *scrolled_window, *text_view; ++ GtkTextBuffer *text_buffer; ++ ++ /* create a scrolled window to get a vertical scrollbar */ ++ scrolled_window = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), ++ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); ++ gtk_container_add(GTK_CONTAINER(hbox), scrolled_window); ++ gtk_widget_show(scrolled_window); ++ ++ /* create the gtk_text_view widget */ ++ text_view = gtk_text_view_new(); ++ gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE); ++ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD); ++ gtk_container_add(GTK_CONTAINER(scrolled_window), text_view); ++ gtk_widget_show(text_view); ++ ++ /* get the text_buffer widget and insert the text from file */ ++ text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); ++ ++ gtk_text_buffer_insert_at_cursor(text_buffer, text, strlen (text)); ++ ++#else /* we do not have gtk_text_view, so we use gtk_text */ ++ GtkWidget *text, *vscrollbar; ++ ++ /* Create the gtk_text widget */ ++ text = gtk_text_new(NULL, NULL); ++ gtk_text_set_editable(GTK_TEXT(text), FALSE); /* text is not editable */ ++ gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); /* wrap complete words */ ++ gtk_box_pack_start(GTK_BOX(hbox), text, TRUE, TRUE, 0); ++ gtk_widget_show(text); ++ ++ /* Add a vertical scrollbar to the GtkText widget */ ++ vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj); ++ gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0); ++ gtk_widget_show(vscrollbar); ++ ++ /* Freeze the text widget, ready for multiple updates */ ++ gtk_text_freeze(GTK_TEXT(text)); ++ ++ gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, text, strlen (text)); ++ ++ /* Thaw the text widget, allowing the updates to become visible */ ++ gtk_text_thaw(GTK_TEXT(text)); ++#endif ++ ++ return hbox; ++} ++ ++/* ---------------------------------------------------------------------------------------------------------------------- */ ++ ++static void center_pane_callback (GtkWidget *pane, gpointer data) ++{ ++ gint max_pos; ++ ++ /* Center pane handle */ ++ g_object_get (G_OBJECT (pane), "max-position", &max_pos, NULL); ++ gtk_paned_set_position (GTK_PANED (pane), (gint)(max_pos / 2)); ++}; ++ ++/* ---------------------------------------------------------------------------------------------------------------------- */ ++ + static int eula_accept_flag; + static GtkWidget *eula_dialog = NULL; + +@@ -1911,11 +1978,13 @@ static void xsane_eula_button_callback(G + int xsane_display_eula(int ask_for_accept) + /* returns FALSE if accepted, TRUE if not accepted */ + { +- GtkWidget *vbox, *hbox, *button, *label, *frame; ++ GtkWidget *vbox, *hbox, *button, *frame, *pane; + GtkAccelGroup *accelerator_group; + char buf[1024]; + char filename[PATH_MAX]; + FILE *infile; ++ gint width, height; ++ GString *text; + + DBG(DBG_proc, "xsane_display_eula(%d)\n", ask_for_accept); + +@@ -1925,7 +1994,8 @@ int xsane_display_eula(int ask_for_accep + } + + eula_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL); +- gtk_widget_set_size_request(eula_dialog, 550, 580); ++ gdk_window_get_geometry (gdk_get_default_root_window (), NULL, NULL, &width, &height, NULL); ++ gtk_widget_set_size_request(eula_dialog, MIN (550, (int)(0.9 * width)), MIN (580, (int)(0.9 * height))); + gtk_window_set_position(GTK_WINDOW(eula_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_resizable(GTK_WINDOW(eula_dialog), TRUE); + g_signal_connect(GTK_OBJECT(eula_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_eula_delete_event), (void *) -1); /* -1 = cancel */ +@@ -1955,6 +2025,11 @@ int xsane_display_eula(int ask_for_accep + xsane_set_window_icon(eula_dialog, 0); + #endif + ++ pane = gtk_vpaned_new (); ++ g_signal_connect_after (G_OBJECT (pane), "realize", (GCallback)center_pane_callback, NULL); ++ gtk_box_pack_start(GTK_BOX(vbox), pane, TRUE, TRUE, 0); ++ gtk_widget_show (pane); ++ + /* display XSane copyright message */ + snprintf(buf, sizeof(buf), "XSane %s %s\n" + "%s %s\n" +@@ -1968,109 +2043,42 @@ int xsane_display_eula(int ask_for_accep + TEXT_HOMEPAGE, XSANE_HOMEPAGE, + TEXT_EMAIL_ADR, XSANE_EMAIL_ADR); + +- label = gtk_label_new(buf); +- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); +- gtk_widget_show(label); +- +- /* add hbox with text and scrollbar to display the eula text */ +- hbox = gtk_hbox_new(FALSE, 2); ++ hbox = xsane_eula_license_textbox (buf); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); +- gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); ++ gtk_paned_add1 (GTK_PANED (pane), hbox); + gtk_widget_show(hbox); + +-#ifdef HAVE_GTK_TEXT_VIEW_H +- { +- GtkWidget *scrolled_window, *text_view; +- GtkTextBuffer *text_buffer; +- +- /* create a scrolled window to get a vertical scrollbar */ +- scrolled_window = gtk_scrolled_window_new(NULL, NULL); +- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), +- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); +- gtk_container_add(GTK_CONTAINER(hbox), scrolled_window); +- gtk_widget_show(scrolled_window); +- +- /* create the gtk_text_view widget */ +- text_view = gtk_text_view_new(); +- gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE); +- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD); +- gtk_container_add(GTK_CONTAINER(scrolled_window), text_view); +- gtk_widget_show(text_view); +- +- /* get the text_buffer widget and insert the text from file */ +- text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); +- +- xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", 0, "xsane-eula", 0, ".txt", XSANE_PATH_SYSTEM); +- infile = fopen(filename, "r"); +- +- if (infile) +- { +- char buffer[4096]; +- int nchars; +- +- while (!feof(infile)) +- { +- nchars = fread(buffer, 1, 4096, infile); +- gtk_text_buffer_insert_at_cursor(text_buffer, buffer, nchars); +- } ++ /* Load the EULA text */ ++ xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", 0, "xsane-eula", 0, ".txt", XSANE_PATH_SYSTEM); ++ infile = fopen(filename, "r"); + +- fclose(infile); +- } +- else +- { +- DBG(DBG_error0, "ERROR: eula text not found. Looks like xsane is not installed correct.\n"); +- return TRUE; +- } +- +- } +-#else /* we do not have gtk_text_view, so we use gtk_text */ ++ text = g_string_new (NULL); ++ if (infile) + { +- GtkWidget *text, *vscrollbar; +- +- /* Create the gtk_text widget */ +- text = gtk_text_new(NULL, NULL); +- gtk_text_set_editable(GTK_TEXT(text), FALSE); /* text is not editable */ +- gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); /* wrap complete words */ +- gtk_box_pack_start(GTK_BOX(hbox), text, TRUE, TRUE, 0); +- gtk_widget_show(text); ++ char buffer[4096]; ++ int nchars; + +- /* Add a vertical scrollbar to the GtkText widget */ +- vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj); +- gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0); +- gtk_widget_show(vscrollbar); +- +- /* Freeze the text widget, ready for multiple updates */ +- gtk_text_freeze(GTK_TEXT(text)); +- +- /* Load the file text.c into the text window */ +- xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", 0, "xsane-eula", 0, ".txt", XSANE_PATH_SYSTEM); +- infile = fopen(filename, "r"); +- +- if (infile) ++ while (!feof(infile)) + { +- char buffer[4096]; +- int nchars; +- +- while (!feof(infile)) +- { +- nchars = fread(buffer, 1, 4096, infile); +- gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, buffer, nchars); +- } +- +- fclose(infile); +- } +- else +- { +- DBG(DBG_error0, "ERROR: eula text not found. Looks like xsane is not installed correct.\n"); +- return TRUE; ++ nchars = fread(buffer, 1, 4096, infile); ++ text = g_string_append_len (text, buffer, nchars); + } + +- /* Thaw the text widget, allowing the updates to become visible */ +- gtk_text_thaw(GTK_TEXT(text)); ++ fclose(infile); ++ } ++ else ++ { ++ DBG(DBG_error0, "ERROR: eula text not found. Looks like xsane is not installed correct.\n"); ++ g_string_free (text, TRUE); ++ return TRUE; + } +-#endif +- + ++ /* add hbox with text and scrollbar to display the eula text */ ++ hbox = xsane_eula_license_textbox (text->str); ++ g_string_free (text, TRUE); ++ gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); ++ gtk_paned_add2 (GTK_PANED (pane), hbox); ++ gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); +@@ -2157,11 +2165,13 @@ static gboolean xsane_license_dialog_del + + void xsane_display_gpl(void) + { +- GtkWidget *vbox, *hbox, *button, *label, *frame; ++ GtkWidget *vbox, *hbox, *button, *frame, *pane; + GtkAccelGroup *accelerator_group; + char buf[1024]; + char filename[PATH_MAX]; + FILE *infile; ++ gint width, height; ++ GString *text; + + if (license_dialog) /* make sure the dialog is only opend once */ + { +@@ -2169,7 +2179,8 @@ void xsane_display_gpl(void) + } + + license_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL); +- gtk_widget_set_size_request(license_dialog, 550, 580); ++ gdk_window_get_geometry (gdk_get_default_root_window (), NULL, NULL, &width, &height, NULL); ++ gtk_widget_set_size_request(license_dialog, MIN (550, (int)(0.9 * width)), MIN (580, (int)(0.9 * height))); + gtk_window_set_position(GTK_WINDOW(license_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_resizable(GTK_WINDOW(license_dialog), TRUE); + g_signal_connect(GTK_OBJECT(license_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_license_dialog_delete_event), NULL); +@@ -2199,6 +2210,11 @@ void xsane_display_gpl(void) + xsane_set_window_icon(license_dialog, 0); + #endif + ++ pane = gtk_vpaned_new (); ++ g_signal_connect_after (G_OBJECT (pane), "realize", (GCallback)center_pane_callback, NULL); ++ gtk_box_pack_start(GTK_BOX(vbox), pane, TRUE, TRUE, 0); ++ gtk_widget_show (pane); ++ + /* display XSane copyright message */ + snprintf(buf, sizeof(buf), "XSane %s %s\n" + "%s %s\n" +@@ -2212,109 +2228,42 @@ void xsane_display_gpl(void) + TEXT_HOMEPAGE, XSANE_HOMEPAGE, + TEXT_EMAIL_ADR, XSANE_EMAIL_ADR); + +- label = gtk_label_new(buf); +- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); +- gtk_widget_show(label); +- +- /* add hbox with text and scrollbar to display the license text */ +- hbox = gtk_hbox_new(FALSE, 2); ++ hbox = xsane_eula_license_textbox (buf); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); +- gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); ++ gtk_paned_add1 (GTK_PANED (pane), hbox); + gtk_widget_show(hbox); + +-#ifdef HAVE_GTK_TEXT_VIEW_H +- { +- GtkWidget *scrolled_window, *text_view; +- GtkTextBuffer *text_buffer; ++ /* Load the license text */ ++ xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", 0, "xsane-gpl", 0, ".txt", XSANE_PATH_SYSTEM); ++ infile = fopen(filename, "r"); + +- /* create a scrolled window to get a vertical scrollbar */ +- scrolled_window = gtk_scrolled_window_new(NULL, NULL); +- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), +- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); +- gtk_container_add(GTK_CONTAINER(hbox), scrolled_window); +- gtk_widget_show(scrolled_window); +- +- /* create the gtk_text_view widget */ +- text_view = gtk_text_view_new(); +- gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE); +- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD); +- gtk_container_add(GTK_CONTAINER(scrolled_window), text_view); +- gtk_widget_show(text_view); +- +- /* get the text_buffer widget and insert the text from file */ +- text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); +- +- xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", 0, "xsane-gpl", 0, ".txt", XSANE_PATH_SYSTEM); +- infile = fopen(filename, "r"); +- +- if (infile) +- { +- char buffer[4096]; +- int nchars; +- +- while (!feof(infile)) +- { +- nchars = fread(buffer, 1, 4096, infile); +- gtk_text_buffer_insert_at_cursor(text_buffer, buffer, nchars); +- } +- +- fclose(infile); +- } +- else +- { +- DBG(DBG_error0, "ERROR: license text not found. Looks like xsane is not installed correct.\n"); +- return; +- } +- +- } +-#else /* we do not have gtk_text_view, so we use gtk_text */ ++ text = g_string_new (NULL); ++ if (infile) + { +- GtkWidget *text, *vscrollbar; +- +- /* Create the gtk_text widget */ +- text = gtk_text_new(NULL, NULL); +- gtk_text_set_editable(GTK_TEXT(text), FALSE); /* text is not editable */ +- gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); /* wrap complete words */ +- gtk_box_pack_start(GTK_BOX(hbox), text, TRUE, TRUE, 0); +- gtk_widget_show(text); +- +- /* Add a vertical scrollbar to the GtkText widget */ +- vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj); +- gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0); +- gtk_widget_show(vscrollbar); +- +- /* Freeze the text widget, ready for multiple updates */ +- gtk_text_freeze(GTK_TEXT(text)); +- +- /* Load the file text.c into the text window */ +- xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", 0, "xsane-gpl", 0, ".txt", XSANE_PATH_SYSTEM); +- infile = fopen(filename, "r"); ++ char buffer[4096]; ++ int nchars; + +- if (infile) ++ while (!feof(infile)) + { +- char buffer[4096]; +- int nchars; +- +- while (!feof(infile)) +- { +- nchars = fread(buffer, 1, 4096, infile); +- gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, buffer, nchars); +- } +- +- fclose(infile); +- } +- else +- { +- DBG(DBG_error0, "ERROR: license text not found. Looks like xsane is not installed correct.\n"); +- return; ++ nchars = fread(buffer, 1, 4096, infile); ++ text = g_string_append_len (text, buffer, nchars); + } + +- /* Thaw the text widget, allowing the updates to become visible */ +- gtk_text_thaw(GTK_TEXT(text)); ++ fclose(infile); ++ } ++ else ++ { ++ DBG(DBG_error0, "ERROR: license text not found. Looks like xsane is not installed correct.\n"); ++ g_string_free (text, TRUE); ++ return; + } +-#endif +- + ++ /* add hbox with text and scrollbar to display the license text */ ++ hbox = xsane_eula_license_textbox (text->str); ++ g_string_free (text, TRUE); ++ gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); ++ gtk_paned_add2 (GTK_PANED (pane), hbox); ++ gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); diff --git a/xsane.spec b/xsane.spec index da9cffa..399220b 100644 --- a/xsane.spec +++ b/xsane.spec @@ -3,11 +3,12 @@ Name: xsane Summary: X Window System front-end for the SANE scanner interface Version: 0.995 -Release: 1%{?dist} +Release: 2%{?dist} Source0: http://www.xsane.org/download/%{name}-%{version}.tar.gz Source1: xsane.desktop Source2: xsane.conf.in Patch0: xsane-0.995-xdg-open.patch +Patch1: xsane-0.995-eula-license-size.patch License: GPLv2+ URL: http://www.xsane.org/ Group: Applications/Multimedia @@ -39,6 +40,7 @@ installed to use this package. %prep %setup -q %patch0 -p1 -b .xdg-open +%patch1 -p1 -b .eula-license-size %build %configure --enable-gimp @@ -103,7 +105,10 @@ fi %config(noreplace) %{_sysconfdir}/gimp/plugins.d/xsane.conf %changelog -* Thu Oct 15 2007 Nils Philippsen - 0.995-1 +* Thu Nov 29 2007 Nils Philippsen - 0.995-2 +- make EULA, license dialogs be viewable on 800x600 displays + +* Fri Nov 23 2007 Nils Philippsen - 0.995-1 - version 0.995 - remove obsolete gimp2.0, medium-definitions, showeulaonce patches