Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -u rdesktop-1.6.0/debian/changelog rdesktop-1.6.0/debian/changelog
- --- rdesktop-1.6.0/debian/changelog
- +++ rdesktop-1.6.0/debian/changelog
- @@ -1,3 +1,11 @@
- +rdesktop (1.6.0-3ubuntu1) lucid; urgency=low
- +
- + * Merge from debian testing, remaining Ubuntu changes:
- + - Add viewport patch.
- + - Add patch from Alt Linux that adds support for raw keyboard.
- +
- + -- Brian Murray <brian@ubuntu.com> Wed, 17 Feb 2010 10:16:22 -0800
- +
- rdesktop (1.6.0-3) unstable; urgency=low
- [ Patrick Calhoun ]
- @@ -20,6 +28,21 @@
- -- Laszlo Boszormenyi (GCS) <gcs@debian.hu> Thu, 20 Aug 2009 23:07:08 +0000
- +rdesktop (1.6.0-2ubuntu2) karmic; urgency=low
- +
- + * Update Maintainer to Ubuntu Core Developers
- +
- + -- Brian Murray <brian@ubuntu.com> Tue, 23 Jun 2009 15:22:18 -0700
- +
- +rdesktop (1.6.0-2ubuntu1) intrepid; urgency=low
- +
- + * Merge from Debian unstable (LP: #84072), remaining Ubuntu changes:
- + - Build with ALSA support.
- + - Add viewport patch.
- + - Add patch from Alt Linux that adds support for raw keyboard.
- +
- + -- Benjamin Drung <benjamin.drung@gmail.com> Tue, 19 Aug 2008 23:55:43 +0200
- +
- rdesktop (1.6.0-2) unstable; urgency=low
- * Compile with IPv6 support (closes: #432299).
- @@ -30,12 +53,42 @@
- -- Laszlo Boszormenyi (GCS) <gcs@debian.hu> Sat, 16 Aug 2008 14:40:47 +0000
- +rdesktop (1.6.0-1ubuntu1) intrepid; urgency=low
- +
- + * Merge from Debian unstable
- + * Remaining Ubuntu changes:
- + - Replace x-dev with libx11-dev in Build-Depends.
- + - Build with ALSA support.
- + - Add viewport patch.
- + * Add patch from Alt Linux that adds support for raw keyboard.
- + (LP: #251709)
- +
- + -- Steve Kowalik <stevenk@ubuntu.com> Mon, 28 Jul 2008 12:49:31 +1000
- +
- rdesktop (1.6.0-1) unstable; urgency=low
- * New stable upstream release (closes: #484071).
- -- Laszlo Boszormenyi (GCS) <gcs@debian.hu> Wed, 04 Jun 2008 09:24:17 +0200
- +rdesktop (1.6.0-0ubuntu2) intrepid; urgency=low
- +
- + * Add in dpatch.
- + * Merge viewport patch from the package in the ubuntu-mobile PPA.
- + * Munge Maintainer as per spec.
- +
- + -- Steve Kowalik <stevenk@ubuntu.com> Fri, 27 Jun 2008 14:53:29 +1000
- +
- +rdesktop (1.6.0-0ubuntu1) intrepid; urgency=low
- +
- + * merge new upstream version. LP: #235160
- + * new upstream fixes security issues. LP: #228193
- + * replace x-dev with libx11-dev in build-depends.
- + * build with alsa support. add libasound2-dev and libsamplerate to build
- + dependencies. LP: #231997
- +
- + -- Reinhard Tartler <siretart@tauware.de> Tue, 27 May 2008 23:48:23 +0200
- +
- rdesktop (1.5.0-4+cvs20071006) unstable; urgency=high
- * Fix three security bugs by backporting them to this CVS snapshot, namely
- @@ -195,0 +249 @@
- +
- diff -u rdesktop-1.6.0/debian/control rdesktop-1.6.0/debian/control
- --- rdesktop-1.6.0/debian/control
- +++ rdesktop-1.6.0/debian/control
- @@ -1,7 +1,8 @@
- Source: rdesktop
- Section: x11
- Priority: optional
- -Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.hu>
- +Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
- +XSBC-Original-Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.hu>
- Build-Depends: debhelper (>= 6.0.0), dpatch (>= 2.0.9), pkg-config, autotools-dev, libasound2-dev, libxt-dev, libx11-dev, libssl-dev
- Standards-Version: 3.8.2
- diff -u rdesktop-1.6.0/debian/rules rdesktop-1.6.0/debian/rules
- --- rdesktop-1.6.0/debian/rules
- +++ rdesktop-1.6.0/debian/rules
- @@ -26,7 +26,7 @@
- CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --with-ipv6 --with-sound=alsa
- -build: build-stamp
- +build: patch-stamp build-stamp
- build-stamp: patch-stamp config.status
- dh_testdir
- @@ -35,7 +35,8 @@
- touch build-stamp
- -clean: unpatch
- +clean: clean-patched unpatch
- +clean-patched:
- dh_testdir
- dh_testroot
- rm -f build-stamp
- diff -u rdesktop-1.6.0/debian/patches/00list rdesktop-1.6.0/debian/patches/00list
- --- rdesktop-1.6.0/debian/patches/00list
- +++ rdesktop-1.6.0/debian/patches/00list
- @@ -16,6 +16,8 @@
- # 5 -> General code
- # 8 -> Fix for some architectures support
- #
- +01_paging.dpatch
- +02_raw_keyboard_support.dpatch
- 32_it_keymap.dpatch
- 35_force_rdpdr.dpatch
- 80_config.dpatch
- only in patch2:
- unchanged:
- --- rdesktop-1.6.0.orig/debian/patches/02_raw_keyboard_support.dpatch
- +++ rdesktop-1.6.0/debian/patches/02_raw_keyboard_support.dpatch
- @@ -0,0 +1,331 @@
- +#! /bin/sh /usr/share/dpatch/dpatch-run
- +## 02_raw_keyboard_suppport.dpatch by Alt Linux.
- +##
- +## All lines beginning with `## DP:' are a description of the patch.
- +## DP: Add support for raw keyboard.
- +
- +@DPATCH@
- +diff -urN rdesktop.orig/rdesktop.c rdesktop/rdesktop.c
- +--- rdesktop.orig/rdesktop.c 2007-02-10 07:48:50 +0200
- ++++ rdesktop/rdesktop.c 2007-04-21 19:27:14 +0300
- +@@ -91,6 +91,7 @@
- + RD_BOOL g_owncolmap = False;
- + RD_BOOL g_ownbackstore = True; /* We can't rely on external BackingStore */
- + RD_BOOL g_seamless_rdp = False;
- ++RD_BOOL g_raw_keyboard = False;
- + uint32 g_embed_wnd;
- + uint32 g_rdp5_performanceflags =
- + RDP5_NO_WALLPAPER | RDP5_NO_FULLWINDOWDRAG | RDP5_NO_MENUANIMATIONS;
- +@@ -211,6 +212,7 @@
- + fprintf(stderr, " -0: attach to console\n");
- + fprintf(stderr, " -4: use RDP version 4\n");
- + fprintf(stderr, " -5: use RDP version 5 (default)\n");
- ++ fprintf(stderr, " -y: use raw keyboard (default no)\n");
- + }
- +
- + static void
- +@@ -450,7 +452,7 @@
- + #endif
- +
- + while ((c = getopt(argc, argv,
- +- VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045h?")) != -1)
- ++ VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045yh?")) != -1)
- + {
- + switch (c)
- + {
- +@@ -782,6 +784,9 @@
- + case '5':
- + g_use_rdp5 = True;
- + break;
- ++ case 'y':
- ++ g_raw_keyboard = True;
- ++ break;
- +
- + case 'h':
- + case '?':
- +diff -urN rdesktop.orig/scancodes.h rdesktop/scancodes.h
- +--- rdesktop.orig/scancodes.h 2003-10-28 05:20:43 +0200
- ++++ rdesktop/scancodes.h 2007-04-21 19:27:30 +0300
- +@@ -152,7 +152,7 @@
- + #define SCANCODE_KEY_43 0x1c
- + #define SCANCODE_CHAR_ENTER SCANCODE_KEY_43
- +
- +-#define SCANCODE_KEY_44 0x2a
- ++#define SCANCODE_KEY_44 (SCANCODE_EXTENDED | 0x2a)
- + #define SCANCODE_CHAR_LSHIFT SCANCODE_KEY_44
- +
- + /* Only on international keyboard */
- +@@ -191,7 +191,7 @@
- + /* Only on Brazilian and some Far East keyboards */
- + #define SCANCODE_KEY_56 0x73
- +
- +-#define SCANCODE_KEY_57 0x36
- ++#define SCANCODE_KEY_57 (SCANCODE_EXTENDED | 0x36)
- + #define SCANCODE_CHAR_RSHIFT SCANCODE_KEY_57
- +
- + #define SCANCODE_KEY_58 0x1d
- +@@ -352,10 +352,15 @@
- +
- + /* Key 124: The Print Screen sequence is complicated, and
- + hardcoded in xkeymap.c */
- ++#define SCANCODE_KEY_124 0xff
- ++#define SCANCODE_CHAR_PRINT SCANCODE_KEY_124
- +
- + #define SCANCODE_KEY_125 0x46
- + #define SCANCODE_CHAR_SCROLLLOCK SCANCODE_KEY_125
- +
- ++#define SCANCODE_KEY_126 (SCANCODE_EXTENDED | 0x59)
- ++#define SCANCODE_CHAR_PAUSE SCANCODE_KEY_126
- ++
- + /* Key 126: The Pause and Break sequences is complicated, and
- + hardcoded in xkeymap.c */
- +
- +diff -urN rdesktop.orig/xkeymap.c rdesktop/xkeymap.c
- +--- rdesktop.orig/xkeymap.c 2007-03-20 17:32:43 +0200
- ++++ rdesktop/xkeymap.c 2007-04-21 19:47:15 +0300
- +@@ -55,6 +55,7 @@
- + static int min_keycode;
- + static uint16 remote_modifier_state = 0;
- + static uint16 saved_remote_modifier_state = 0;
- ++static uint32 vkmenu, vkcontrol, vklshift, vkrshift, vknumlock;
- +
- + static void update_modifier_state(uint8 scancode, RD_BOOL pressed);
- +
- +@@ -949,6 +950,7 @@
- + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT);
- +
- + reset_winkey(ev_time);
- ++ vknumlock = get_key_state(state, XK_Num_Lock);
- +
- + if (g_numlock_sync)
- + rdp_send_input(ev_time, RDP_INPUT_SYNCHRONIZE, 0, ui_get_numlock_state(state), 0);
- +@@ -1034,3 +1036,153 @@
- + rdp_send_input(time, RDP_INPUT_SCANCODE, flags, scancode, 0);
- + }
- + }
- ++
- ++typedef unsigned char byte;
- ++typedef unsigned int dword;
- ++
- ++static byte vkscancode[ 128] = {
- ++ /* 00 - 07 */ 0, 0, 0, 0, 0, 0, 0, 0,
- ++ /* 08 - 0f */ 0, SCANCODE_CHAR_ESC, SCANCODE_CHAR_1, SCANCODE_CHAR_2, SCANCODE_CHAR_3, SCANCODE_CHAR_4, SCANCODE_CHAR_5, SCANCODE_CHAR_6,
- ++ /* 10 - 17 */ SCANCODE_CHAR_7, SCANCODE_CHAR_8, SCANCODE_CHAR_9, SCANCODE_CHAR_0, SCANCODE_CHAR_MINUS, SCANCODE_CHAR_EQUAL, SCANCODE_CHAR_BACKSPACE, SCANCODE_CHAR_TAB,
- ++ /* 18 - 1f */ SCANCODE_CHAR_Q, SCANCODE_CHAR_W, SCANCODE_CHAR_E, SCANCODE_CHAR_R, SCANCODE_CHAR_T, SCANCODE_CHAR_Y, SCANCODE_CHAR_U, SCANCODE_CHAR_I,
- ++ /* 20 - 27 */ SCANCODE_CHAR_O, SCANCODE_CHAR_P, SCANCODE_CHAR_BRACKETLEFT, SCANCODE_CHAR_BRACKETRIGHT, SCANCODE_CHAR_ENTER, SCANCODE_CHAR_LCTRL, SCANCODE_CHAR_A, SCANCODE_CHAR_S,
- ++ /* 28 - 2f */ SCANCODE_CHAR_D, SCANCODE_CHAR_F, SCANCODE_CHAR_G, SCANCODE_CHAR_H, SCANCODE_CHAR_J, SCANCODE_CHAR_K, SCANCODE_CHAR_L, SCANCODE_CHAR_SEMICOLON,
- ++ /* 30 - 37 */ SCANCODE_CHAR_APOSTROPHE, SCANCODE_CHAR_GRAVE, SCANCODE_CHAR_LSHIFT, SCANCODE_KEY_42, SCANCODE_CHAR_Z, SCANCODE_CHAR_X, SCANCODE_CHAR_C, SCANCODE_CHAR_V,
- ++ /* 38 - 3f */ SCANCODE_CHAR_B, SCANCODE_CHAR_N, SCANCODE_CHAR_M, SCANCODE_CHAR_COMMA, SCANCODE_CHAR_DOT, SCANCODE_CHAR_SLASH, SCANCODE_CHAR_RSHIFT, SCANCODE_CHAR_NUMERICSTAR,
- ++ /* 40 - 47 */ SCANCODE_CHAR_LALT, SCANCODE_CHAR_SPACE, SCANCODE_CHAR_CAPSLOCK, SCANCODE_CHAR_F1, SCANCODE_CHAR_F2, SCANCODE_CHAR_F3, SCANCODE_CHAR_F4, SCANCODE_CHAR_F5,
- ++ /* 48 - 4f */ SCANCODE_CHAR_F6, SCANCODE_CHAR_F7, SCANCODE_CHAR_F8, SCANCODE_CHAR_F9, SCANCODE_CHAR_F10, SCANCODE_CHAR_NUMLOCK, SCANCODE_CHAR_SCROLLLOCK, SCANCODE_CHAR_NUMERIC7,
- ++ /* 50 - 57 */ SCANCODE_CHAR_NUMERIC8, SCANCODE_CHAR_NUMERIC9, SCANCODE_CHAR_NUMERICMINUS, SCANCODE_CHAR_NUMERIC4, SCANCODE_CHAR_NUMERIC5, SCANCODE_CHAR_NUMERIC6, SCANCODE_CHAR_NUMERICPLUS, SCANCODE_CHAR_NUMERIC1,
- ++ /* 58 - 5f */ SCANCODE_CHAR_NUMERIC2, SCANCODE_CHAR_NUMERIC3, SCANCODE_CHAR_NUMERIC0, SCANCODE_CHAR_NUMERICDOT, 0, 0, 0, SCANCODE_CHAR_F11,
- ++ /* 60 - 67 */ SCANCODE_CHAR_F12, SCANCODE_CHAR_HOME, SCANCODE_CHAR_UPARROW, SCANCODE_CHAR_PAGEUP, SCANCODE_CHAR_LARROW, 0, SCANCODE_CHAR_RARROW, SCANCODE_CHAR_END,
- ++ /* 68 - 6f */ SCANCODE_CHAR_DNARROW, SCANCODE_CHAR_PAGEDOWN, SCANCODE_CHAR_INSERT, SCANCODE_CHAR_DELETE, SCANCODE_CHAR_NUMERICENTER, SCANCODE_CHAR_RCTRL, SCANCODE_CHAR_PAUSE, SCANCODE_CHAR_PRINT,
- ++ /* 70 - 77 */ SCANCODE_CHAR_NUMERICSLASH, SCANCODE_CHAR_RALT, 0, SCANCODE_CHAR_LWIN, SCANCODE_CHAR_RWIN, SCANCODE_CHAR_APPLICATION, 0, 0,
- ++ /* 78 - 7f */ 0, 0, 0, 0, 0, 0, 0, 0
- ++};
- ++
- ++
- ++static inline int vk_handle_special_keys( uint32 keysym, uint32 ev_time, RD_BOOL pressed) {
- ++
- ++ RD_BOOL leftkey = 0;
- ++
- ++ switch( keysym) {
- ++ case SCANCODE_CHAR_NUMLOCK:
- ++ if( !pressed)
- ++ vknumlock = !vknumlock;
- ++ return 0;
- ++
- ++ case SCANCODE_CHAR_ENTER:
- ++ case SCANCODE_CHAR_NUMERICENTER:
- ++ if( pressed && vkmenu && vkcontrol) {
- ++ /* Ctrl-Alt-Enter: toggle full screen */
- ++ xwin_toggle_fullscreen();
- ++ return 1;
- ++ }
- ++ return 0;
- ++
- ++ case SCANCODE_CHAR_PAUSE:
- ++ if( pressed) {
- ++ if( vkcontrol) {
- ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, (SCANCODE_EXTENDED | 0x46));
- ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, (SCANCODE_EXTENDED | 0xc6));
- ++ }
- ++ else {
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x1d, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x45, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x9d, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xc5, 0);
- ++ }
- ++ }
- ++ else {
- ++ /* Release Left Ctrl */
- ++ if( vkcontrol)
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0);
- ++ }
- ++ return 1;
- ++
- ++ case SCANCODE_CHAR_PRINT:
- ++ if( vkmenu)
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, 0x54, 0);
- ++ else if( vkcontrol && (vklshift || vklshift))
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, SCANCODE_EXTENDED|0x37, 0);
- ++ else {
- ++#if 0
- ++ if( pressed) {
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, SCANCODE_CHAR_LSHIFT, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, SCANCODE_EXTENDED|0x37, 0);
- ++ }
- ++ else {
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, SCANCODE_EXTENDED|0x37, 0);
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT, 0);
- ++ }
- ++#endif
- ++ }
- ++ return 1;
- ++
- ++ case SCANCODE_CHAR_LWIN:
- ++ leftkey = True;
- ++ case SCANCODE_CHAR_RWIN:
- ++ if( pressed) {
- ++ if( g_use_rdp5) {
- ++ rdp_send_scancode(ev_time, RDP_KEYPRESS, keysym);
- ++ }
- ++ else {
- ++ /* RDP4 doesn't support winkey. Fake with Ctrl-Esc */
- ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, SCANCODE_CHAR_LCTRL);
- ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, SCANCODE_CHAR_ESC);
- ++ }
- ++ }
- ++ else {
- ++ if( g_use_rdp5) {
- ++ rdp_send_scancode(ev_time, RDP_KEYRELEASE, keysym);
- ++ }
- ++ else {
- ++ rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_ESC);
- ++ rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LCTRL);
- ++ }
- ++ }
- ++ return 1;
- ++
- ++ case SCANCODE_CHAR_INSERT:
- ++ case SCANCODE_CHAR_DELETE:
- ++ case SCANCODE_CHAR_LARROW:
- ++ case SCANCODE_CHAR_HOME:
- ++ case SCANCODE_CHAR_END:
- ++ case SCANCODE_CHAR_UPARROW:
- ++ case SCANCODE_CHAR_DNARROW:
- ++ case SCANCODE_CHAR_PAGEUP:
- ++ case SCANCODE_CHAR_PAGEDOWN:
- ++ case SCANCODE_CHAR_RARROW:
- ++ rdp_send_scancode( ev_time, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);
- ++ rdp_send_scancode( ev_time, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, keysym);
- ++ return 1;
- ++ }
- ++ return 0;
- ++}
- ++
- ++void vk_handle_key( XKeyEvent *xkey) {
- ++
- ++ uint32 vk, ev_time, pressed = (xkey->type == KeyPress);
- ++
- ++ vk = vkscancode[ xkey->keycode];
- ++ DEBUG_KBD(( "vk_handle_key( scancode=0x%x) vk = 0x%x\n", xkey->keycode, vk));
- ++
- ++ if( !vk)
- ++ return;
- ++
- ++ ev_time = time( 0);
- ++
- ++ if( (vk == SCANCODE_CHAR_LCTRL) || (vk == SCANCODE_CHAR_RCTRL))
- ++ vkcontrol = pressed;
- ++ else if( (vk == SCANCODE_CHAR_LALT) || (vk == SCANCODE_CHAR_RALT))
- ++ vkmenu = pressed;
- ++ else if( vk == SCANCODE_CHAR_LSHIFT)
- ++ vklshift = pressed;
- ++ else if( vk == SCANCODE_CHAR_RSHIFT)
- ++ vkrshift = pressed;
- ++ else if( vk_handle_special_keys( vk, ev_time, pressed))
- ++ return;
- ++
- ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, vk, 0);
- ++}
- +���� rdesktop.orig/xkeymap.o � rdesktop/xkeymap.o ���������
- +diff -urN rdesktop.orig/xwin.c rdesktop/xwin.c
- +--- rdesktop.orig/xwin.c 2007-04-12 19:04:25 +0300
- ++++ rdesktop/xwin.c 2007-04-21 19:39:42 +0300
- +@@ -28,6 +28,8 @@
- + #include <strings.h>
- + #include "rdesktop.h"
- + #include "xproto.h"
- ++#include "X11/XKBlib.h"
- ++#include "X11/keysym.h"
- +
- + extern int g_width;
- + extern int g_height;
- +@@ -43,6 +45,7 @@
- + As of RDP 5.1, it may be 8, 15, 16 or 24. */
- + extern int g_server_depth;
- + extern int g_win_button_size;
- ++extern RD_BOOL g_raw_keyboard;
- +
- + Display *g_display;
- + Time g_last_gesturetime;
- +@@ -127,6 +130,8 @@
- + so its endianess doesn't matter)
- + */
- + static RD_BOOL g_no_translate_image = False;
- ++static RD_BOOL g_modeswitch_down = False;
- ++
- +
- + /* endianness */
- + static RD_BOOL g_host_be;
- +@@ -1953,6 +1958,8 @@
- + }
- + }
- +
- ++extern void vk_handle_key( XKeyEvent *xkey);
- ++
- +
- + /* Process events in Xlib queue
- + Returns 0 after user quit, 1 otherwise */
- +@@ -1977,6 +1984,12 @@
- + continue;
- + }
- +
- ++ if( g_raw_keyboard && ((xevent.type == KeyPress) || (xevent.type == KeyRelease))) {
- ++ g_last_gesturetime = xevent.xkey.time;
- ++ vk_handle_key( (XKeyEvent*)&xevent);
- ++ continue;
- ++ }
- ++
- + switch (xevent.type)
- + {
- + case VisibilityNotify:
- +@@ -2016,6 +2029,11 @@
- + str, sizeof(str), &keysym, NULL);
- + }
- +
- ++
- ++ // Mode_switch during XGrabKeyboard fix: Ungrab Keyboard during Mode_switch
- ++ if ( keysym == XK_Mode_switch ) g_modeswitch_down = True;
- ++ if ( g_focused && g_modeswitch_down ) XUngrabKeyboard(g_display, CurrentTime);
- ++
- + DEBUG_KBD(("KeyPress for keysym (0x%lx, %s)\n", keysym,
- + get_ksname(keysym)));
- +
- +@@ -2032,6 +2050,11 @@
- + XLookupString((XKeyEvent *) & xevent, str,
- + sizeof(str), &keysym, NULL);
- +
- ++
- ++ // Mode_switch during XGrabKeyboard fix: Regrab Keyboard after Mode_switch
- ++ if ( keysym == XK_Mode_switch ) g_modeswitch_down = False;
- ++ if ( g_focused && !g_modeswitch_down ) XGrabKeyboard(g_display, g_wnd, True, GrabModeAsync, GrabModeAsync, CurrentTime);
- ++
- + DEBUG_KBD(("\nKeyRelease for keysym (0x%lx, %s)\n", keysym,
- + get_ksname(keysym)));
- +
- only in patch2:
- unchanged:
- --- rdesktop-1.6.0.orig/debian/patches/01_paging.dpatch
- +++ rdesktop-1.6.0/debian/patches/01_paging.dpatch
- @@ -0,0 +1,376 @@
- +#! /bin/sh /usr/share/dpatch/dpatch-run
- +## 01_paging.dpatch by Adilson Oliveira <adilson@ubuntu.com>
- +##
- +## All lines beginning with `## DP:' are a description of the patch.
- +## DP: Add viewport mode, suitable for small screens.
- +
- +@DPATCH@
- +diff -Nur -x '*.orig' -x '*~' rdesktop-1.5.0.ume/proto.h rdesktop-1.5.0.ume.new/proto.h
- +--- rdesktop-1.5.0.ume/proto.h 2008-03-28 17:31:19.000000000 -0300
- ++++ rdesktop-1.5.0.ume.new/proto.h 2008-03-28 17:31:24.000000000 -0300
- +@@ -235,7 +235,7 @@
- + RD_BOOL get_key_state(unsigned int state, uint32 keysym);
- + RD_BOOL ui_init(void);
- + void ui_deinit(void);
- +-RD_BOOL ui_create_window(void);
- ++RD_BOOL ui_create_window(RD_BOOL ToggleFullscreen);
- + void ui_resize_window(void);
- + void ui_destroy_window(void);
- + void xwin_toggle_fullscreen(void);
- +diff -Nur -x '*.orig' -x '*~' rdesktop-1.5.0.ume/rdesktop.c rdesktop-1.5.0.ume.new/rdesktop.c
- +--- rdesktop-1.5.0.ume/rdesktop.c 2008-03-28 17:31:19.000000000 -0300
- ++++ rdesktop-1.5.0.ume.new/rdesktop.c 2008-03-28 17:31:42.000000000 -0300
- +@@ -103,6 +103,13 @@
- + char g_redirect_cookie[128];
- + uint32 g_redirect_flags = 0;
- +
- ++/* For viewport mode */
- ++int xo = 0;
- ++int yo = 0;
- ++int perm_xo = 0; // Safe to keep in 0 for now
- ++int perm_yo = 0;
- ++RD_BOOL viewport_mode = False;
- ++
- + #ifdef WITH_RDPSND
- + RD_BOOL g_rdpsnd = False;
- + #endif
- +@@ -122,6 +129,7 @@
- + rdp2vnc_connect(char *server, uint32 flags, char *domain, char *password,
- + char *shell, char *directory);
- + #endif
- ++
- + /* Display usage information */
- + static void
- + usage(char *program)
- +@@ -563,6 +571,8 @@
- + g_pos |= (*p == '-') ? 4 : 1;
- + g_ypos = strtol(p, NULL, 10);
- + }
- ++ perm_xo = xo;
- ++ perm_yo = yo;
- +
- + break;
- +
- +@@ -947,7 +957,7 @@
- + memset(password, 0, sizeof(password));
- +
- + if (run_count == 0)
- +- if (!ui_create_window())
- ++ if (!ui_create_window(False))
- + continue_connect = False;
- +
- + if (continue_connect)
- +diff -Nur -x '*.orig' -x '*~' rdesktop-1.5.0.ume/xwin.c rdesktop-1.5.0.ume.new/xwin.c
- +--- rdesktop-1.5.0.ume/xwin.c 2008-03-28 17:31:19.000000000 -0300
- ++++ rdesktop-1.5.0.ume.new/xwin.c 2008-03-28 17:31:24.000000000 -0300
- +@@ -50,7 +50,11 @@
- + static int g_x_socket;
- + static Screen *g_screen;
- + Window g_wnd;
- +-
- ++extern BOOL viewport_mode;
- ++BOOL viewport_keys_enabled = False;
- ++BOOL viewport_mode_locked = False;
- ++Window g_viewport_wnd = 0;
- ++uint32 g_embed_wnd;
- + /* SeamlessRDP support */
- + typedef struct _seamless_group
- + {
- +@@ -134,6 +138,27 @@
- + ('host' is the machine running rdesktop; the host simply memcpy's
- + so its endianess doesn't matter)
- + */
- ++static Cursor viewportCursor;
- ++static int viewportLastX;
- ++static int viewportLastY;
- ++int g_viewport_width;
- ++int g_viewport_height;
- ++int g_saved_viewport_width = 0;
- ++int g_saved_viewport_height= 0;
- ++int g_saved_viewport_x= 0;
- ++int g_saved_viewport_y= 0;
- ++int g_saved_wnd_x = 0;
- ++int g_saved_wnd_y = 0;
- ++int g_wnd_x;
- ++int g_wnd_y;
- ++int viewport_x1;
- ++int viewport_y1;
- ++int xo;
- ++int yo;
- ++extern int perm_xo;
- ++extern int perm_yo;
- ++
- ++void MoveViewport(int hShift, int vShift);
- + static RD_BOOL g_no_translate_image = False;
- +
- + /* endianness */
- +@@ -524,7 +549,7 @@
- + return;
- + }
- +
- +- XChangeProperty(g_display, wnd, hintsatom, hintsatom, 32, PropModeReplace,
- ++ XChangeProperty(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, hintsatom, hintsatom, 32, PropModeReplace,
- + (unsigned char *) &motif_hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
- +
- + }
- +@@ -1722,7 +1747,7 @@
- + }
- +
- + RD_BOOL
- +-ui_create_window(void)
- ++ui_create_window(RD_BOOL ToggleFullscreen)
- + {
- + uint8 null_pointer_mask[1] = { 0x80 };
- + uint8 null_pointer_data[24] = { 0x00 };
- +@@ -1733,6 +1758,7 @@
- + int wndwidth, wndheight;
- + long input_mask, ic_input_mask;
- + XEvent xevent;
- ++ int x1, y1;
- +
- + wndwidth = g_fullscreen ? WidthOfScreen(g_screen) : g_width;
- + wndheight = g_fullscreen ? HeightOfScreen(g_screen) : g_height;
- +@@ -1767,7 +1793,75 @@
- + XSetForeground(g_display, g_gc, BlackPixelOfScreen(g_screen));
- + XFillRectangle(g_display, g_backstore, g_gc, 0, 0, g_width, g_height);
- + }
- +-
- ++ if ((((g_width >= WidthOfScreen(g_screen)*1.05)) ||
- ++ (g_height >= (HeightOfScreen(g_screen)*1.1))) && (ToggleFullscreen))
- ++ {
- ++ viewport_mode_locked = True;
- ++ viewport_keys_enabled = True;
- ++ }
- ++
- ++ if ((!g_embed_wnd) && (viewport_mode))
- ++ {
- ++ if (g_fullscreen)
- ++ {
- ++ x1 = (WidthOfScreen(g_screen) - g_width)/2;
- ++ y1 = (HeightOfScreen(g_screen) - g_height)/2;
- ++ g_viewport_width = (WidthOfScreen(g_screen));
- ++ g_viewport_height= (HeightOfScreen(g_screen));
- ++ }
- ++ else
- ++ {
- ++ if (!ToggleFullscreen)
- ++ {
- ++ xo = g_saved_viewport_x;
- ++ yo = g_saved_viewport_y;
- ++ }
- ++ if (g_saved_wnd_x == 0 && g_saved_wnd_y == 0)
- ++ {
- ++ x1 = y1 = 0;
- ++ }
- ++ else
- ++ {
- ++ x1 = g_saved_wnd_x;
- ++ y1 = g_saved_wnd_y;
- ++ }
- ++
- ++ if (g_saved_viewport_width && g_saved_viewport_height)
- ++ {
- ++ g_viewport_width = g_saved_viewport_width;
- ++ g_viewport_height = g_saved_viewport_height;
- ++ }
- ++ else
- ++ {
- ++ g_viewport_width = wndwidth < (WidthOfScreen(g_screen)*1.05) ? wndwidth : WidthOfScreen(g_screen)*3/4;
- ++ g_viewport_height= wndheight< (HeightOfScreen(g_screen)*1.1) ? wndheight: HeightOfScreen(g_screen)*3/4;
- ++ g_viewport_width = g_viewport_width & ~3;
- ++ }
- ++ }
- ++
- ++ attribs.override_redirect = g_fullscreen;
- ++
- ++ if (viewport_mode)
- ++ {
- ++ if ((xo == 0) && (yo == 0))
- ++ {
- ++ xo = (WidthOfScreen(g_screen) - g_viewport_width)/2;
- ++ yo = (HeightOfScreen(g_screen) - g_viewport_height)/2;
- ++ }
- ++ g_viewport_wnd = XCreateWindow (g_display, RootWindowOfScreen(g_screen), xo, yo, g_viewport_width, g_viewport_height,
- ++ 0, g_depth, InputOutput, g_visual, CWBackPixel | CWBackingStore | CWOverrideRedirect | CWColormap | CWBorderPixel, &attribs);
- ++
- ++ XSelectInput(g_display, g_viewport_wnd, ButtonPressMask | KeyPressMask |
- ++ StructureNotifyMask | (g_fullscreen ? EnterWindowMask : 0) |
- ++ (g_grab_keyboard ? (EnterWindowMask | LeaveWindowMask) : 0));
- ++
- ++ XReparentWindow (g_display, g_wnd, g_viewport_wnd, (ToggleFullscreen && g_fullscreen) ? perm_xo : 0, (ToggleFullscreen && g_fullscreen) ? perm_yo : 0);
- ++ }
- ++ }
- ++
- ++ /* Check XStoreName consistency */
- ++
- ++ XStoreName(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, g_title);
- + XStoreName(g_display, g_wnd, g_title);
- + ewmh_set_wm_name(g_wnd, g_title);
- +
- +@@ -1778,7 +1872,7 @@
- + if (classhints != NULL)
- + {
- + classhints->res_name = classhints->res_class = "rdesktop";
- +- XSetClassHint(g_display, g_wnd, classhints);
- ++ XSetClassHint(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, classhints);
- + XFree(classhints);
- + }
- +
- +@@ -1790,7 +1884,7 @@
- + sizehints->flags |= PPosition;
- + sizehints->min_width = sizehints->max_width = g_width;
- + sizehints->min_height = sizehints->max_height = g_height;
- +- XSetWMNormalHints(g_display, g_wnd, sizehints);
- ++ XSetWMNormalHints(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, sizehints);
- + XFree(sizehints);
- + }
- +
- +@@ -1812,9 +1906,15 @@
- + }
- +
- + XSelectInput(g_display, g_wnd, input_mask);
- +- XMapWindow(g_display, g_wnd);
- ++ if (viewport_mode)
- ++ {
- ++ XMapWindow (g_display, g_viewport_wnd);
- ++ }
- ++
- ++ XMapWindow(g_display, g_wnd);
- ++
- ++ /* wait for VisibilityNotify */
- +
- +- /* wait for VisibilityNotify */
- + do
- + {
- + XMaskEvent(g_display, VisibilityChangeMask, &xevent);
- +@@ -1876,7 +1976,14 @@
- + if (g_IC != NULL)
- + XDestroyIC(g_IC);
- +
- +- XDestroyWindow(g_display, g_wnd);
- ++ if (g_viewport_wnd)
- ++ {
- ++ XDestroyWindow (g_display, g_viewport_wnd);
- ++ }
- ++ else
- ++ {
- ++ XDestroyWindow(g_display, g_wnd);
- ++ }
- + }
- +
- + void
- +@@ -1897,7 +2004,7 @@
- +
- + ui_destroy_window();
- + g_fullscreen = !g_fullscreen;
- +- ui_create_window();
- ++ ui_create_window(True);
- +
- + XDefineCursor(g_display, g_wnd, g_current_cursor);
- +
- +@@ -2101,6 +2208,21 @@
- + xevent.xmotion.y_root - g_move_y_offset);
- + break;
- + }
- ++
- ++ if (viewportCursor)
- ++ {
- ++ /*
- ++ * Pointer is in viewport navigation mode.
- ++ */
- ++
- ++ MoveViewport(viewportLastX - xevent.xmotion.x_root,
- ++ viewportLastY - xevent.xmotion.y_root);
- ++
- ++ viewportLastX = xevent.xmotion.x_root;
- ++ viewportLastY = xevent.xmotion.y_root;
- ++
- ++ break;
- ++ }
- +
- + if (g_fullscreen && !g_focused)
- + XSetInputFocus(g_display, g_wnd, RevertToPointerRoot,
- +@@ -3286,6 +3408,83 @@
- +
- + XFree(image);
- + }
- ++void MoveViewport(int hShift, int vShift)
- ++{
- ++ int newX;
- ++ int newY;
- ++ Bool do_move = False;
- ++ int viewportXSpan = g_viewport_width - g_width;
- ++ int viewportYSpan = g_viewport_height - g_height;
- ++
- ++ if (!g_viewport_wnd)
- ++ {
- ++ return;
- ++ }
- ++
- ++ /*
- ++ * We must keep x coordinate between viewportXSpan and zero, if viewportXSpan
- ++ * is less then zero. If viewportXSpan is greater or equal to zero, it means
- ++ * the agent root window has a size smaller than the agent default window.
- ++ * In this case we keep the old coordinate.
- ++ */
- ++
- ++ if (viewportXSpan < 0)
- ++ {
- ++ newX = g_wnd_x - hShift;
- ++
- ++ if (newX > 0)
- ++ {
- ++ newX = 0;
- ++ }
- ++ else if (newX < viewportXSpan)
- ++ {
- ++ newX = viewportXSpan;
- ++ }
- ++ }
- ++ else if (viewportXSpan == 0)
- ++ {
- ++ newX = 0;
- ++ }
- ++ else
- ++ {
- ++ newX = g_wnd_x;
- ++ }
- ++
- ++ if (viewportYSpan < 0)
- ++ {
- ++ newY = g_wnd_y - vShift;
- ++ if (newY > 0)
- ++ {
- ++ newY = 0;
- ++ }
- ++ else if (newY < viewportYSpan)
- ++ {
- ++ newY = viewportYSpan;
- ++ }
- ++ }
- ++ else if (viewportYSpan == 0)
- ++ {
- ++ newY = 0;
- ++ }
- ++ else
- ++ {
- ++ newY = g_wnd_y;
- ++ }
- ++ if (newX != g_wnd_x)
- ++ {
- ++ g_wnd_x = newX;
- ++ do_move = True;
- ++ }
- ++ if (newY != g_wnd_y)
- ++ {
- ++ g_wnd_y = newY;
- ++ do_move = True;
- ++ }
- ++
- ++ if (do_move)
- ++ XMoveWindow(g_display, g_wnd, g_wnd_x, g_wnd_y);
- ++}
- ++
- +
- + /* these do nothing here but are used in uiports */
- + void
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement