]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkprintunixdialog.c
always set hide_tooltip to TRUE if we are handling a leave notify event.
[~andy/gtk] / gtk / gtkprintunixdialog.c
index 26d9d3f552dc7edec0c14ae93aea848902c078e7..66b65c8bdb00f50e099234a02379aa7a68c6fdb2 100644 (file)
@@ -21,6 +21,7 @@
 #include "config.h"
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <stdio.h>
 #include <math.h>
 
@@ -45,7 +46,6 @@
 #include "gtkframe.h"
 #include "gtkalignment.h"
 #include "gtklabel.h"
-#include "gtktooltips.h"
 #include "gtkeventbox.h"
 
 #include "gtkprintbackend.h"
@@ -123,7 +123,6 @@ struct GtkPrintUnixDialogPrivate
 
   GtkPageSetup *page_setup;
 
-  GtkTooltips *tooltips;
   GtkWidget *all_pages_radio;
   GtkWidget *current_page_radio;
   GtkWidget *page_range_radio;
@@ -271,9 +270,6 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
   priv->print_backends = NULL;
   priv->current_page = -1;
 
-  priv->tooltips = gtk_tooltips_new ();
-  g_object_ref_sink (priv->tooltips);
-
   priv->page_setup = gtk_page_setup_new ();
 
   g_signal_connect (dialog, 
@@ -315,12 +311,6 @@ gtk_print_unix_dialog_finalize (GObject *object)
 
   unschedule_idle_mark_conflicts (dialog);
 
-  if (priv->tooltips)
-    {
-      g_object_unref (priv->tooltips);
-      priv->tooltips = NULL;
-    }
-
   if (priv->request_details_tag)
     {
       g_source_remove (priv->request_details_tag);
@@ -427,6 +417,7 @@ printer_added_cb (GtkPrintBackend    *backend,
   GtkPrintUnixDialogPrivate *priv = dialog->priv;
   GtkTreeIter iter, filter_iter;
   GtkTreeSelection *selection;
+  GtkTreePath *path;
 
   gtk_list_store_append (GTK_LIST_STORE (priv->printer_list), &iter);
   
@@ -446,7 +437,8 @@ printer_added_cb (GtkPrintBackend    *backend,
 
   gtk_tree_model_filter_convert_child_iter_to_iter (priv->printer_list_filter,
                                                    &filter_iter, &iter);
-  
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->printer_list_filter), &filter_iter);
+
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->printer_treeview));
   
   if (priv->waiting_for_printer != NULL &&
@@ -455,6 +447,8 @@ printer_added_cb (GtkPrintBackend    *backend,
     {
       priv->internal_printer_change = TRUE;
       gtk_tree_selection_select_iter (selection, &filter_iter);
+      gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->printer_treeview),
+                                    path, NULL, TRUE, 0.5, 0.0);
       priv->internal_printer_change = FALSE;
       g_free (priv->waiting_for_printer);
       priv->waiting_for_printer = NULL;
@@ -464,8 +458,12 @@ printer_added_cb (GtkPrintBackend    *backend,
     {
       priv->internal_printer_change = TRUE;
       gtk_tree_selection_select_iter (selection, &filter_iter);
+      gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->printer_treeview),
+                                    path, NULL, TRUE, 0.5, 0.0);
       priv->internal_printer_change = FALSE;
     }
+
+  gtk_tree_path_free (path);
 }
 
 static void
@@ -1049,6 +1047,8 @@ update_dialog_from_capabilities (GtkPrintUnixDialog *dialog)
                            caps & GTK_PRINT_CAPABILITY_REVERSE);
   gtk_widget_set_sensitive (priv->scale_spin,
                            caps & GTK_PRINT_CAPABILITY_SCALE);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->pages_per_sheet),
+                           caps & GTK_PRINT_CAPABILITY_NUMBER_UP);
 
   if (caps & GTK_PRINT_CAPABILITY_PREVIEW)
     gtk_widget_show (priv->preview_button);
@@ -1237,13 +1237,13 @@ selected_printer_changed (GtkTreeSelection   *selection,
                          -1);
     }
   
-  if (printer != NULL && !_gtk_printer_has_details (printer))
+  if (printer != NULL && !gtk_printer_has_details (printer))
     {
       gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
       priv->request_details_tag =
        g_signal_connect (printer, "details-acquired",
                          G_CALLBACK (printer_details_acquired), dialog);
-      _gtk_printer_request_details (printer);
+      gtk_printer_request_details (printer);
       g_object_unref (printer);
       return;
     }
@@ -1275,7 +1275,7 @@ selected_printer_changed (GtkTreeSelection   *selection,
 
   if (printer != NULL)
     {
-      priv->printer_capabilities = _gtk_printer_get_capabilities (printer);
+      priv->printer_capabilities = gtk_printer_get_capabilities (printer);
       priv->options = _gtk_printer_get_options (printer, 
                                                priv->initial_settings,
                                                priv->page_setup,
@@ -1429,7 +1429,7 @@ create_main_page (GtkPrintUnixDialog *dialog)
   GtkPrintUnixDialogPrivate *priv = dialog->priv;
   GtkWidget *main_vbox, *label, *vbox, *hbox;
   GtkWidget *scrolled, *treeview, *frame, *table;
-  GtkWidget *entry, *spinbutton, *event_box;
+  GtkWidget *entry, *spinbutton;
   GtkWidget *radio, *check, *image;
   GtkCellRenderer *renderer;
   GtkTreeViewColumn *column;
@@ -1531,7 +1531,7 @@ create_main_page (GtkPrintUnixDialog *dialog)
                    0, 0);
  
   radio = gtk_radio_button_new_with_mnemonic (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Ra_nge"));
-  gtk_tooltips_set_tip (priv->tooltips, radio, _("Specify one or more page ranges,\n e.g. 1-3,7,11"), NULL);
+  gtk_widget_set_tooltip_text (radio, _("Specify one or more page ranges,\n e.g. 1-3,7,11"));
  
   priv->page_range_radio = radio;
   gtk_widget_show (radio);
@@ -1644,22 +1644,33 @@ dialog_get_page_ranges (GtkPrintUnixDialog *dialog,
   p = text;
   while (*p)
     {
-      start = (int)strtol (p, &next, 10);
-      if (start < 1)
-       start = 1;
+      while (isspace (*p)) p++;
+
+      if (*p == '-')
+        {
+          /* a half-open range like -2 */
+          start = 1;
+        }
+      else
+        {
+          start = (int)strtol (p, &next, 10);
+          if (start < 1)
+           start = 1;
+          p = next;
+        }
+      
       end = start;
 
-      if (next != p)
-       {
-         p = next;
+      while (isspace (*p)) p++;
 
-         if (*p == '-')
-           {
-             p++;
-             end = (int)strtol (p, NULL, 10);
-             if (end < start)
-               end = start;
-           }
+      if (*p == '-')
+       {
+         p++;
+         end = (int)strtol (p, &next, 10);
+          if (next == p) /* a half-open range like 2- */
+            end = 0;
+         else if (end < start)
+           end = start;
        }
 
       ranges[i].start = start - 1;
@@ -1694,6 +1705,8 @@ dialog_set_page_ranges (GtkPrintUnixDialog *dialog,
       g_string_append_printf (s, "%d", ranges[i].start + 1);
       if (ranges[i].end > ranges[i].start)
        g_string_append_printf (s, "-%d", ranges[i].end + 1);
+      else if (ranges[i].end == -1)
+        g_string_append (s, "-");
       
       if (i != n_ranges - 1)
        g_string_append (s, ",");