gtk+ r20943 - in trunk: . gtk



Author: tml
Date: Sat Aug  2 09:31:01 2008
New Revision: 20943
URL: http://svn.gnome.org/viewvc/gtk+?rev=20943&view=rev

Log:
2008-08-02  Tor Lillqvist  <tml novell com>

	* gtk/gtkprint-win32.c
	* gtk/gtkprint-win32.h
	* gtk/gtkprintoperation-win32.c: Cosmetic fixups after patch
	below.



Modified:
   trunk/ChangeLog
   trunk/gtk/gtkprint-win32.c
   trunk/gtk/gtkprintoperation-win32.c

Modified: trunk/gtk/gtkprint-win32.c
==============================================================================
--- trunk/gtk/gtkprint-win32.c	(original)
+++ trunk/gtk/gtkprint-win32.c	Sat Aug  2 09:31:01 2008
@@ -104,48 +104,55 @@
 {
   HGLOBAL global;
   GtkPrintWin32Devnames *devnames;
+
   devnames = gtk_print_win32_devnames_from_printer_name(printer_name);
-  if(devnames)
-  {
-    global = gtk_print_win32_devnames_to_win32 (devnames);
-    gtk_print_win32_devnames_free(devnames);
-  }
+  if (devnames)
+    {
+      global = gtk_print_win32_devnames_to_win32 (devnames);
+      gtk_print_win32_devnames_free (devnames);
+    }
   else
     global = NULL;
+
   return global;
 }
 
-/**
- used to get printer device information from a printer name
- since this can fail, because the user have no right to read printer properties, this function can return NULL
-*/
+/*
+ * Used to get printer device information from a printer name.  This
+ * can fail if the user has no right to read printer properties, so
+ * this function can return NULL.
+ */
 GtkPrintWin32Devnames *
 gtk_print_win32_devnames_from_printer_name (const char *printer_name)
 {
   HANDLE hprinter;
   gunichar2* win32_printer_name;
   GtkPrintWin32Devnames *devnames;
+
   win32_printer_name = g_utf8_to_utf16 (printer_name, -1, NULL, NULL, NULL);
-  if(OpenPrinterW(win32_printer_name, &hprinter, NULL))
-  {
-     DWORD needed;
-     PRINTER_INFO_2W* printer_info;
-     GetPrinterW(hprinter, 2, NULL, 0,&needed);
-	 printer_info = (PRINTER_INFO_2W*)g_malloc((gsize)needed);
-     GetPrinterW(hprinter, 2, (LPBYTE)printer_info,needed,&needed);
-     devnames = g_new (GtkPrintWin32Devnames, 1);
-     devnames->driver = g_utf16_to_utf8(printer_info->pDriverName,-1,NULL,NULL,NULL);
-	 devnames->device = g_strdup(printer_name);
-	 devnames->output = g_utf16_to_utf8(printer_info->pPortName,-1,NULL,NULL,NULL);
-	 devnames->flags  = 0;
-	 ClosePrinter(hprinter);
-	 g_free(printer_info);
-  }else
-  {
-    // could not open printer
-    devnames = NULL;
-  }
-  g_free(win32_printer_name);
+  if (OpenPrinterW (win32_printer_name, &hprinter, NULL))
+    {
+      DWORD needed;
+      PRINTER_INFO_2W* printer_info;
+
+      GetPrinterW (hprinter, 2, NULL, 0, &needed);
+      printer_info = (PRINTER_INFO_2W* )g_malloc ((gsize) needed);
+      GetPrinterW (hprinter, 2, (LPBYTE) printer_info, needed, &needed);
+      devnames = g_new (GtkPrintWin32Devnames, 1);
+      devnames->driver = g_utf16_to_utf8 (printer_info->pDriverName, -1, NULL, NULL, NULL);
+      devnames->device = g_strdup (printer_name);
+      devnames->output = g_utf16_to_utf8 (printer_info->pPortName, -1, NULL, NULL, NULL);
+      devnames->flags  = 0;
+      ClosePrinter (hprinter);
+      g_free (printer_info);
+    }
+  else
+    {
+      /* Could not open printer */
+      devnames = NULL;
+    }
+  g_free (win32_printer_name);
+
   return devnames;
 }
 

Modified: trunk/gtk/gtkprintoperation-win32.c
==============================================================================
--- trunk/gtk/gtkprintoperation-win32.c	(original)
+++ trunk/gtk/gtkprintoperation-win32.c	Sat Aug  2 09:31:01 2008
@@ -416,18 +416,23 @@
   return 0;
 }
 
-gchar* win32_get_default_printer(){
-  gunichar2* win32_printer_name = NULL;
-  gchar*     printer_name = NULL;
+static gchar*
+get_default_printer (void)
+{
+  wchar_t *win32_printer_name = NULL;
+  gchar *printer_name = NULL;
   DWORD needed;
-  GetDefaultPrinterW(NULL,&needed);
-  win32_printer_name = g_malloc((gsize)needed*sizeof(gunichar2));
-  if(!GetDefaultPrinterW(win32_printer_name,&needed)){
-     g_free(win32_printer_name);
-	 return NULL;
-  }
-  printer_name = g_utf16_to_utf8(win32_printer_name,-1,NULL,NULL,NULL);
-  g_free(win32_printer_name);
+
+  GetDefaultPrinterW (NULL, &needed);
+  win32_printer_name = g_malloc ((gsize) needed * sizeof (wchar_t));
+  if (!GetDefaultPrinterW (win32_printer_name, &needed))
+    {
+      g_free (win32_printer_name);
+      return NULL;
+    }
+  printer_name = g_utf16_to_utf8 (win32_printer_name, -1, NULL, NULL, NULL);
+  g_free (win32_printer_name);
+
   return printer_name;
 }
 
@@ -520,13 +525,13 @@
       GlobalUnlock (op_win32->devnames);
     }
   
-  GlobalFree(op_win32->devmode);
-  GlobalFree(op_win32->devnames);
+  GlobalFree (op_win32->devmode);
+  GlobalFree (op_win32->devnames);
 
   cairo_surface_destroy (op_win32->surface);
   op_win32->surface = NULL;
 
-  DeleteDC(op_win32->hdc);
+  DeleteDC (op_win32->hdc);
   
   if (printerHandle != 0)
     {
@@ -1313,8 +1318,8 @@
 		  gboolean          was_grabbed,
 		  GtkPrintOperation *op)
 {
-  EnableWindow(GetAncestor (GDK_WINDOW_HWND (widget->window), GA_ROOT),
-	       was_grabbed);
+  EnableWindow (GetAncestor (GDK_WINDOW_HWND (widget->window), GA_ROOT),
+		was_grabbed);
 }
 
 
@@ -1332,7 +1337,7 @@
       op = GTK_PRINT_OPERATION ((gpointer)page->lParam);
       op_win32 = op->priv->platform_data;
 
-      SetWindowLongPtrW(wnd, GWLP_USERDATA, (LONG_PTR)op);
+      SetWindowLongPtrW (wnd, GWLP_USERDATA, (LONG_PTR)op);
       
       plug = _gtk_win32_embed_widget_new ((GdkNativeWindow) wnd);
       gtk_window_set_modal (GTK_WINDOW (plug), TRUE);
@@ -1351,7 +1356,7 @@
     }
   else if (message == WM_DESTROY)
     {
-      op = GTK_PRINT_OPERATION (GetWindowLongPtrW(wnd, GWLP_USERDATA));
+      op = GTK_PRINT_OPERATION (GetWindowLongPtrW (wnd, GWLP_USERDATA));
       op_win32 = op->priv->platform_data;
       
       g_signal_emit_by_name (op, "custom-widget-apply", op->priv->custom_widget);
@@ -1361,7 +1366,7 @@
     }
   else 
     {
-      op = GTK_PRINT_OPERATION (GetWindowLongPtrW(wnd, GWLP_USERDATA));
+      op = GTK_PRINT_OPERATION (GetWindowLongPtrW (wnd, GWLP_USERDATA));
       op_win32 = op->priv->platform_data;
 
       return _gtk_win32_embed_widget_dialog_procedure (GTK_WIN32_EMBED_WIDGET (op_win32->embed_widget),
@@ -1387,27 +1392,27 @@
   /* Make the template the size of the custom widget size request */
   gtk_widget_size_request (op->priv->custom_widget, &requisition);
       
-  base_units = GetDialogBaseUnits();
-  baseunitX = LOWORD(base_units);
-  baseunitY = HIWORD(base_units);
+  base_units = GetDialogBaseUnits ();
+  baseunitX = LOWORD (base_units);
+  baseunitY = HIWORD (base_units);
   
   htemplate = GlobalAlloc (GMEM_MOVEABLE, 
-			   sizeof (DLGTEMPLATE) + sizeof(WORD) * 3);
+			   sizeof (DLGTEMPLATE) + sizeof (WORD) * 3);
   template = GlobalLock (htemplate);
   template->style = WS_CHILDWINDOW | DS_CONTROL;
   template->dwExtendedStyle = WS_EX_CONTROLPARENT;
   template->cdit = 0;
-  template->x = MulDiv(0, 4, baseunitX);
-  template->y = MulDiv(0, 8, baseunitY);
-  template->cx = MulDiv(requisition.width, 4, baseunitX);
-  template->cy = MulDiv(requisition.height, 8, baseunitY);
+  template->x = MulDiv (0, 4, baseunitX);
+  template->y = MulDiv (0, 8, baseunitY);
+  template->cx = MulDiv (requisition.width, 4, baseunitX);
+  template->cy = MulDiv (requisition.height, 8, baseunitY);
   
   array = (WORD *) (template+1);
   *array++ = 0; /* menu */
   *array++ = 0; /* class */
   *array++ = 0; /* title */
   
-  memset(&page, 0, sizeof (page));
+  memset (&page, 0, sizeof (page));
   page.dwSize = sizeof (page);
   page.dwFlags = PSP_DLGINDIRECT | PSP_USETITLE | PSP_PREMATURE;
   page.hInstance = GetModuleHandle (NULL);
@@ -1423,7 +1428,7 @@
   page.pfnDlgProc = pageDlgProc;
   page.pfnCallback = NULL;
   page.lParam = (LPARAM) op;
-  hpage = CreatePropertySheetPageW(&page);
+  hpage = CreatePropertySheetPageW (&page);
   
   GlobalUnlock (htemplate);
   
@@ -1467,8 +1472,9 @@
   return page_setup;
 }
 
-GtkPrintOperationResult gtk_print_operation_run_without_dialog(GtkPrintOperation *op,
-						  gboolean *do_print)
+GtkPrintOperationResult
+gtk_print_operation_run_without_dialog (GtkPrintOperation *op,
+					gboolean          *do_print)
 {
   GtkPrintOperationResult result;
   GtkPrintOperationWin32 *op_win32;
@@ -1476,16 +1482,19 @@
   GtkPrintSettings *settings;
   GtkPageSetup *page_setup;
   DOCINFOW docinfo;
-  HGLOBAL hDevMode    = NULL;
-  HGLOBAL hDevNames   = NULL;
-  HDC     hDC         = NULL;
-  const char* printer = NULL;
+  HGLOBAL hDevMode = NULL;
+  HGLOBAL hDevNames = NULL;
+  HDC hDC = NULL;
+  const char *printer = NULL;
   double dpi_x, dpi_y;
   int job_id;
   cairo_t *cr;
+  DEVNAMES *pdn;
+  DEVMODEW *pdm;
+
   *do_print = FALSE;
 
-  priv     = op->priv;
+  priv = op->priv;
   settings = priv->print_settings;
   
   op_win32 = g_new0 (GtkPrintOperationWin32, 1);
@@ -1493,49 +1502,48 @@
   priv->free_platform_data = (GDestroyNotify) op_win32_free;
   printer = gtk_print_settings_get_printer (settings);
 
-  if (!printer){
-      /**
-      no printer selected,
-      get the system default printer and store it to settings
-      */
-	  gchar* tmp_printer = win32_get_default_printer();
-	  if(!tmp_printer){
-            result = GTK_PRINT_OPERATION_RESULT_ERROR;
-		  	g_set_error_literal (&priv->error,
-		     GTK_PRINT_ERROR,
-		     GTK_PRINT_ERROR_INTERNAL_ERROR,
-		     _("No printer found"));
-			goto out;
-	  }
-	  gtk_print_settings_set_printer(settings,tmp_printer);
+  if (!printer)
+    {
+      /* No printer selected. Get the system default printer and store
+       * it in settings.
+       */
+      gchar *tmp_printer = get_default_printer ();
+      if (!tmp_printer)
+	{
+	  result = GTK_PRINT_OPERATION_RESULT_ERROR;
+	  g_set_error_literal (&priv->error,
+			       GTK_PRINT_ERROR,
+			       GTK_PRINT_ERROR_INTERNAL_ERROR,
+			       _("No printer found"));
+	  goto out;
+	}
+      gtk_print_settings_set_printer (settings, tmp_printer);
       printer = gtk_print_settings_get_printer (settings);
-	  g_free(tmp_printer);
-  }
-  
+      g_free (tmp_printer);
+    }
+
   hDevNames = gtk_print_win32_devnames_to_win32_from_printer_name (printer);
-  hDevMode = devmode_from_settings (settings,
-						op->priv->default_page_setup);
+  hDevMode = devmode_from_settings (settings, op->priv->default_page_setup);
 
-  /**
-  create a printer DC for the print settings and pagesetup provided
-  */
-  DEVNAMES *pdn = GlobalLock(hDevNames);
-  DEVMODEW *pdm = GlobalLock(hDevMode);
-  hDC = CreateDCW((gunichar2*)pdn + pdn->wDriverOffset,
-                  (gunichar2*)pdn + pdn->wDeviceOffset,
-                  (gunichar2*)pdn + pdn->wOutputOffset,
-                  pdm );
-  GlobalUnlock(hDevNames);
-  GlobalUnlock(hDevMode);
+  /* Create a printer DC for the print settings and page setup provided. */
+  pdn = GlobalLock (hDevNames);
+  pdm = GlobalLock (hDevMode);
+  hDC = CreateDCW ((wchar_t*)pdn + pdn->wDriverOffset,
+		   (wchar_t*)pdn + pdn->wDeviceOffset,
+		   (wchar_t*)pdn + pdn->wOutputOffset,
+		   pdm );
+  GlobalUnlock (hDevNames);
+  GlobalUnlock (hDevMode);
 
-  if(!hDC){
+  if (!hDC)
+    {
       result = GTK_PRINT_OPERATION_RESULT_ERROR;
       g_set_error_literal (&priv->error,
-             GTK_PRINT_ERROR,
-             GTK_PRINT_ERROR_INTERNAL_ERROR,
-             _("Invalid argument to CreateDC"));
-	  goto out;
-  }
+			   GTK_PRINT_ERROR,
+			   GTK_PRINT_ERROR_INTERNAL_ERROR,
+			   _("Invalid argument to CreateDC"));
+      goto out;
+    }
   
   priv->print_context = _gtk_print_context_new (op);
   page_setup = create_page_setup (op);
@@ -1545,35 +1553,34 @@
   *do_print = TRUE;
 
   op_win32->surface = cairo_win32_printing_surface_create (hDC);
-  dpi_x = (double)GetDeviceCaps (hDC, LOGPIXELSX);
-  dpi_y = (double)GetDeviceCaps (hDC, LOGPIXELSY);
+  dpi_x = (double) GetDeviceCaps (hDC, LOGPIXELSX);
+  dpi_y = (double) GetDeviceCaps (hDC, LOGPIXELSY);
 
   cr = cairo_create (op_win32->surface);
   gtk_print_context_set_cairo_context (priv->print_context, cr, dpi_x, dpi_y);
   cairo_destroy (cr);
 
-  memset( &docinfo, 0, sizeof (DOCINFOW));
+  memset (&docinfo, 0, sizeof (DOCINFOW));
   docinfo.cbSize = sizeof (DOCINFOW); 
-  docinfo.lpszDocName = g_utf8_to_utf16 (op->priv->job_name,
-                                         -1, NULL, NULL, NULL); 
-  docinfo.lpszOutput = (LPCWSTR) NULL; 
-  docinfo.lpszDatatype = (LPCWSTR) NULL; 
+  docinfo.lpszDocName = g_utf8_to_utf16 (op->priv->job_name, -1, NULL, NULL, NULL); 
+  docinfo.lpszOutput = NULL; 
+  docinfo.lpszDatatype = NULL; 
   docinfo.fwType = 0; 
 
-  job_id = StartDocW(hDC, &docinfo); 
+  job_id = StartDocW (hDC, &docinfo); 
   g_free ((void *)docinfo.lpszDocName);
-  if (job_id <= 0) 
-  { 
-    result = GTK_PRINT_OPERATION_RESULT_ERROR;
-    g_set_error_literal (&priv->error,
-           GTK_PRINT_ERROR,
-           GTK_PRINT_ERROR_GENERAL,
-           _("Error from StartDoc"));
-    *do_print = FALSE;
-    cairo_surface_destroy (op_win32->surface);
-    op_win32->surface = NULL;
-    goto out; 
-  } 
+  if (job_id <= 0)
+    { 
+      result = GTK_PRINT_OPERATION_RESULT_ERROR;
+      g_set_error_literal (&priv->error,
+			   GTK_PRINT_ERROR,
+			   GTK_PRINT_ERROR_GENERAL,
+			   _("Error from StartDoc"));
+      *do_print = FALSE;
+      cairo_surface_destroy (op_win32->surface);
+      op_win32->surface = NULL;
+      goto out; 
+    }
 
   result = GTK_PRINT_OPERATION_RESULT_APPLY;
   op_win32->hdc = hDC;
@@ -1596,21 +1603,23 @@
   op->priv->end_page = win32_end_page;
   op->priv->end_run = win32_end_run;
   
-  out:
+ out:
   if (!*do_print && hDC != NULL)
-    DeleteDC(hDC);
+    DeleteDC (hDC);
 
   if (!*do_print && hDevMode != NULL)
-    GlobalFree(hDevMode);
+    GlobalFree (hDevMode);
 
   if (!*do_print && hDevNames != NULL)
-    GlobalFree(hDevNames);
+    GlobalFree (hDevNames);
 
   return result;
 }
-GtkPrintOperationResult gtk_print_operation_run_with_dialog(GtkPrintOperation *op,
-						  GtkWindow *parent,
-						  gboolean *do_print)
+
+GtkPrintOperationResult
+gtk_print_operation_run_with_dialog (GtkPrintOperation *op,
+				     GtkWindow         *parent,
+				     gboolean          *do_print)
 {
   HRESULT hResult;
   LPPRINTDLGEXW printdlgex = NULL;
@@ -1650,7 +1659,7 @@
       goto out;
     }      
 
-  printdlgex->lStructSize = sizeof(PRINTDLGEXW);
+  printdlgex->lStructSize = sizeof (PRINTDLGEXW);
   printdlgex->hwndOwner = parentHWnd;
   printdlgex->hDevMode = NULL;
   printdlgex->hDevNames = NULL;
@@ -1706,7 +1715,7 @@
   printdlgex->lpCallback = (IUnknown *)callback;
   got_gdk_events_message = RegisterWindowMessage ("GDK_WIN32_GOT_EVENTS");
 
-  hResult = PrintDlgExW(printdlgex);
+  hResult = PrintDlgExW (printdlgex);
   IUnknown_Release ((IUnknown *)callback);
   gdk_win32_set_modal_dialog_libgtk_only (NULL);
 
@@ -1774,14 +1783,14 @@
       gtk_print_context_set_cairo_context (priv->print_context, cr, dpi_x, dpi_y);
       cairo_destroy (cr);
       
-      memset( &docinfo, 0, sizeof (DOCINFOW));
+      memset ( &docinfo, 0, sizeof (DOCINFOW));
       docinfo.cbSize = sizeof (DOCINFOW); 
       docinfo.lpszDocName = g_utf8_to_utf16 (op->priv->job_name, -1, NULL, NULL, NULL); 
       docinfo.lpszOutput = (LPCWSTR) NULL; 
       docinfo.lpszDatatype = (LPCWSTR) NULL; 
       docinfo.fwType = 0; 
 
-      job_id = StartDocW(printdlgex->hDC, &docinfo); 
+      job_id = StartDocW (printdlgex->hDC, &docinfo); 
       g_free ((void *)docinfo.lpszDocName);
       if (job_id <= 0) 
 	{
@@ -1820,13 +1829,13 @@
   
   out:
   if (!*do_print && printdlgex && printdlgex->hDC != NULL)
-    DeleteDC(printdlgex->hDC);
+    DeleteDC (printdlgex->hDC);
 
   if (!*do_print && printdlgex && printdlgex->hDevMode != NULL) 
-    GlobalFree(printdlgex->hDevMode); 
+    GlobalFree (printdlgex->hDevMode); 
 
   if (!*do_print && printdlgex && printdlgex->hDevNames != NULL) 
-    GlobalFree(printdlgex->hDevNames); 
+    GlobalFree (printdlgex->hDevNames); 
 
   if (page_ranges)
     GlobalFree (page_ranges);
@@ -1842,14 +1851,14 @@
 
 GtkPrintOperationResult
 _gtk_print_operation_platform_backend_run_dialog (GtkPrintOperation *op,
-						  gboolean show_dialog,
-						  GtkWindow *parent,
-						  gboolean *do_print)
-{
-	if(show_dialog)
-		return gtk_print_operation_run_with_dialog(op,parent,do_print);
-	else
-		return gtk_print_operation_run_without_dialog(op,do_print);
+						  gboolean           show_dialog,
+						  GtkWindow         *parent,
+						  gboolean          *do_print)
+{
+  if (show_dialog)
+    return gtk_print_operation_run_with_dialog (op, parent, do_print);
+  else
+    return gtk_print_operation_run_without_dialog (op, do_print);
 }
 
 void
@@ -1910,7 +1919,7 @@
 
   template = g_build_filename (g_get_tmp_dir (), "prXXXXXX", NULL);
   fd = g_mkstemp (template);
-  close(fd);
+  close (fd);
 
   filename = g_strconcat (template, ".emf", NULL);
   g_free (template);
@@ -1977,7 +1986,7 @@
   
   memset (pagesetupdlg, 0, sizeof (PAGESETUPDLGW));
 
-  pagesetupdlg->lStructSize = sizeof(PAGESETUPDLGW);
+  pagesetupdlg->lStructSize = sizeof (PAGESETUPDLGW);
 
   if (parent != NULL)
     pagesetupdlg->hwndOwner = get_parent_hwnd (GTK_WIDGET (parent));
@@ -1991,8 +2000,8 @@
   if (printer)
     pagesetupdlg->hDevNames = gtk_print_win32_devnames_to_win32_from_printer_name (printer);
 
-  GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_IMEASURE|LOCALE_RETURN_NUMBER,
-		 (LPWSTR)&measure_system, sizeof (DWORD));
+  GetLocaleInfoW (LOCALE_USER_DEFAULT, LOCALE_IMEASURE|LOCALE_RETURN_NUMBER,
+		  (LPWSTR)&measure_system, sizeof (DWORD));
 
   if (measure_system == 0)
     {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]