--- tsclient-0.150.orig/src/connect.c 2007-04-11 14:15:35.000000000 -0400
+++ tsclient-0.150.printer/src/connect.c 2009-05-20 17:22:42.000000000 -0400
@@ -175,6 +175,16 @@
GtkWidget *cboKeyboardLang;
GtkWidget *txtKeyboardLang;
+ // Printer mapping
+ GtkWidget *chkPrinterMapping;
+
+ // Printer mapping Widgets
+ GtkWidget *framePrinter;
+ GtkWidget *lblPrinterFrame;
+ GtkWidget *tblPrinter;
+ GtkWidget *imgPrinter;
+ GtkWidget *vbxPrinter;
+
// Program Tab Widgets
GtkWidget *lblProgramsTab1;
@@ -840,6 +850,37 @@
gtk_label_set_line_wrap (GTK_LABEL (lblPerformanceOptions), TRUE);
gtk_misc_set_alignment (GTK_MISC (lblPerformanceOptions), 0, 0.5);
+
+ framePrinter = gtk_frame_new(NULL);
+ // Add the new frame to the Local ressource tab
+ gtk_box_pack_start (GTK_BOX (vbxLocalTab1), framePrinter, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (framePrinter), 3);
+ gtk_frame_set_shadow_type (GTK_FRAME (framePrinter), GTK_SHADOW_NONE);
+
+ lblPrinterFrame = gtk_label_new_with_mnemonic (_("Remotely map your Printers"));
+ gtk_label_set_markup (GTK_LABEL (lblPrinterFrame), g_strconcat ("", _("Remotely map your printers"), "", NULL));
+ gtk_frame_set_label_widget (GTK_FRAME (framePrinter), lblPrinterFrame);
+ gtk_label_set_justify (GTK_LABEL (lblPrinterFrame), GTK_JUSTIFY_LEFT);
+
+ tblPrinter = gtk_table_new (1, 2, FALSE);
+ gtk_container_add (GTK_CONTAINER (framePrinter), tblPrinter);
+ gtk_table_set_col_spacings (GTK_TABLE (tblPrinter), 6);
+
+ imgPrinter = create_pixmap (frmConnect, "printer.png");
+ gtk_misc_set_padding (GTK_MISC (imgPrinter), 3, 3);
+ gtk_table_attach (GTK_TABLE (tblPrinter), imgPrinter, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) 0, 0, 0);
+
+ vbxPrinter = gtk_vbox_new (FALSE, 0);
+ gtk_table_attach (GTK_TABLE (tblPrinter), vbxPrinter, 1, 2, 0, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ chkPrinterMapping = gtk_check_button_new_with_mnemonic (_("Add my local printers to the remote computer"));
+ gtk_box_pack_start (GTK_BOX (vbxPrinter), chkPrinterMapping, FALSE, FALSE, 0);
+
+
/*
These are the labels for the notebook control
*/
@@ -1090,6 +1131,8 @@
HOOKUP_OBJECT (frmConnect, txtKeyboardLang, "txtKeyboardLang");
HOOKUP_OBJECT (frmConnect, imgKeyboard, "imgKeyboard");
+ // Printer mapping
+ HOOKUP_OBJECT (frmConnect, chkPrinterMapping, "chkPrinterMapping");
// Program Tab Widgets
HOOKUP_OBJECT (frmConnect, lblProgramsTab1, "lblProgramsTab1");
--- tsclient-0.150.orig/src/rdpfile.c 2007-04-11 11:41:39.000000000 -0400
+++ tsclient-0.150.printer/src/rdpfile.c 2009-05-20 17:22:42.000000000 -0400
@@ -39,6 +39,7 @@
rdp->attach_to_console = 0;
rdp->audiomode = 0;
rdp->auto_connect = 0;
+ rdp->printermapping = 0;
rdp->bitmapcachepersistenable = 0;
rdp->client_hostname = "";
rdp->compression = 0;
@@ -195,6 +196,7 @@
buffer = g_strconcat (buffer, "attach to console:i:", g_strdup_printf("%d",rdp->attach_to_console), "\r\n", NULL);
buffer = g_strconcat (buffer, "audiomode:i:", g_strdup_printf("%d",rdp->audiomode), "\r\n", NULL);
buffer = g_strconcat (buffer, "auto connect:i:", g_strdup_printf("%d",rdp->auto_connect), "\r\n", NULL);
+ buffer = g_strconcat (buffer, "printermapping:i:", g_strdup_printf("%d",rdp->printermapping), "\r\n", NULL);
buffer = g_strconcat (buffer, "bitmapcachepersistenable:i:", g_strdup_printf("%d",rdp->bitmapcachepersistenable), "\r\n", NULL);
buffer = g_strconcat (buffer, "client hostname:s:", rdp->client_hostname, "\r\n", NULL);
buffer = g_strconcat (buffer, "compression:i:", g_strdup_printf("%d",rdp->compression), "\r\n", NULL);
@@ -509,6 +511,12 @@
gtk_option_menu_set_history (GTK_OPTION_MENU(widget), 0);
break;
} */
+
+ widget = lookup_widget (main_window, "chkPrinterMapping");
+ if (rdp->printermapping == 1)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
tsc_set_protocol_widgets (main_window, rdp->protocol);
@@ -700,6 +708,11 @@
value = gtk_editable_get_chars ((GtkEditable*) widget, 0, -1);
if (value) rdp->shell_working_directory = value;
+ widget = lookup_widget (main_window, "chkPrinterMapping");
+ if (gtk_toggle_button_get_active ((GtkToggleButton*)widget))
+ rdp->printermapping = 1;
+ else
+ rdp->printermapping = 0;
widget = lookup_widget (main_window, "chkBitmapCache");
if (!gtk_toggle_button_get_active ((GtkToggleButton*)widget))
@@ -814,6 +827,11 @@
if (strcmp(key, "auto connect") == 0) {
rdp->auto_connect = atoi(value);
}
+
+ if (strcmp(key, "printermapping") == 0) {
+ rdp->printermapping = atoi(value);
+ }
+
if (strcmp(key, "bitmapcachepersistenable") == 0) {
rdp->bitmapcachepersistenable = atoi(value);
}
--- tsclient-0.150.orig/src/rdpfile.h 2007-04-11 11:19:49.000000000 -0400
+++ tsclient-0.150.printer/src/rdpfile.h 2009-05-20 17:22:42.000000000 -0400
@@ -23,6 +23,7 @@
int attach_to_console;
int audiomode;
int auto_connect;
+ int printermapping;
int bitmapcachepersistenable;
char *client_hostname;
int compression;
--- tsclient-0.150.orig/src/support.c 2007-04-19 16:49:22.000000000 -0400
+++ tsclient-0.150.printer/src/support.c 2009-05-20 17:33:27.000000000 -0400
@@ -10,6 +10,7 @@
#include
#include
+#include
#include
#include
#include
@@ -328,6 +329,27 @@
return -1;
}
+/***************************************
+* *
+* tsc_enum_print *
+* *
+***************************************/
+
+static gboolean tsc_enum_print(GtkPrinter *printer, gpointer data)
+{
+ GList ** list;
+ GString *printer_name;
+
+ list = data;
+ printer_name = g_string_new(gtk_printer_get_name(printer));
+ if ( (*list)->data ) {
+ *list = g_list_append(*list, printer_name);
+ } else {
+ (*list)->data = printer_name;
+ }
+ return FALSE;
+}
+
/***************************************
* *
@@ -349,6 +371,8 @@
gchar *std_err;
gint exit_stat = 0;
gint retval = 0;
+ GList *printer_list, *printer_node;
+ GString *printer_string, *printer_cmd;
#ifdef TSCLIENT_DEBUG
printf ("tsc_launch_remote\n");
@@ -473,6 +497,35 @@
sprintf(buffer, "-rclipboard:PRIMARYCLIPBOARD");
c_argv[c_argc++] = g_strdup (buffer);
+ // printer mapping
+ if (rdp->printermapping == 1) {
+ printer_list = g_list_alloc();
+ printer_list->data = NULL;
+
+ gtk_enumerate_printers(tsc_enum_print, &printer_list, NULL, TRUE);
+ if (printer_list->data) {
+ printer_cmd = g_string_new("-rprinter:");
+ int pc = 0;
+
+ for (printer_node = printer_list; printer_node != NULL; printer_node = printer_node->next) {
+ printer_string = printer_node->data;
+ if (pc) {
+ printer_cmd = g_string_append(printer_cmd, ",");
+ printer_cmd = g_string_append(printer_cmd, printer_string->str);
+ } else {
+ printer_cmd = g_string_append(printer_cmd, printer_string->str);
+ }
+ g_string_free(printer_string, TRUE);
+ pc++;
+ }
+ sprintf(buffer, printer_cmd->str);
+ c_argv[c_argc++] = g_strdup (buffer);
+ g_string_free(printer_cmd, TRUE);
+ }
+
+ g_list_free(printer_list);
+ }
+
if (rdp->bitmapcachepersistenable == 1) {
sprintf(buffer, "-b");
c_argv[c_argc++] = g_strdup (buffer);
@@ -518,9 +571,13 @@
}
}
- if (rdp->protocol == 0) {
+ if (rdp->protocol == 0 && rdp->printermapping == 0) {
sprintf (buffer, "-4");
c_argv[c_argc++] = g_strdup (buffer);
+ } else {
+ // printer mapping requires protocol 5
+ sprintf (buffer, "-5");
+ c_argv[c_argc++] = g_strdup (buffer);
}
// do this shit for all modes
@@ -1114,6 +1171,7 @@
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "txtProtoFile"), TRUE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "vbxSound"), TRUE);
+ gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "chkPrinterMapping"), TRUE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "chkStartProgram"), TRUE);
if (gtk_toggle_button_get_active ((GtkToggleButton*)g_object_get_data (G_OBJECT (main_win), "chkStartProgram"))) {
@@ -1136,6 +1194,7 @@
case 1: // vnc
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "txtPassword"), FALSE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "vbxSound"), FALSE);
+ gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "chkPrinterMapping"), TRUE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "chkStartProgram"), FALSE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "txtProgramPath"), FALSE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "txtStartFolder"), FALSE);
@@ -1146,6 +1205,7 @@
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "txtProtoFile"), FALSE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "vbxSound"), FALSE);
+ gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "chkPrinterMapping"), TRUE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "chkStartProgram"), FALSE);
gtk_widget_set_sensitive ((GtkWidget*) g_object_get_data (G_OBJECT (main_win), "txtProgramPath"), FALSE);