* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _MSC_VER
#include "config.h"
#include "gtkprint-win32.h"
-#include "gtkalias.h"
void
gtk_print_win32_devnames_free (GtkPrintWin32Devnames *devnames)
}
HGLOBAL
-gtk_print_win32_devnames_from_printer_name (const char *printer)
+gtk_print_win32_devnames_to_win32_from_printer_name (const char *printer_name)
{
- const GtkPrintWin32Devnames devnames = { "", (char *)printer, "", 0 };
- return gtk_print_win32_devnames_to_win32 (&devnames);
+ 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);
+ }
+ else
+ global = NULL;
+
+ return global;
}
+/*
+ * 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);
-#define __GTK_PRINT_WIN32_C__
-#include "gtkaliasdef.c"
+ return devnames;
+}