Advertisement
Guest User

Untitled

a guest
May 9th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.61 KB | None | 0 0
  1. diff -u rdesktop-1.6.0/debian/changelog rdesktop-1.6.0/debian/changelog
  2. --- rdesktop-1.6.0/debian/changelog
  3. +++ rdesktop-1.6.0/debian/changelog
  4. @@ -1,3 +1,11 @@
  5. +rdesktop (1.6.0-3ubuntu1) lucid; urgency=low
  6. +
  7. + * Merge from debian testing, remaining Ubuntu changes:
  8. + - Add viewport patch.
  9. + - Add patch from Alt Linux that adds support for raw keyboard.
  10. +
  11. + -- Brian Murray <brian@ubuntu.com> Wed, 17 Feb 2010 10:16:22 -0800
  12. +
  13. rdesktop (1.6.0-3) unstable; urgency=low
  14.  
  15. [ Patrick Calhoun ]
  16. @@ -20,6 +28,21 @@
  17.  
  18. -- Laszlo Boszormenyi (GCS) <gcs@debian.hu> Thu, 20 Aug 2009 23:07:08 +0000
  19.  
  20. +rdesktop (1.6.0-2ubuntu2) karmic; urgency=low
  21. +
  22. + * Update Maintainer to Ubuntu Core Developers
  23. +
  24. + -- Brian Murray <brian@ubuntu.com> Tue, 23 Jun 2009 15:22:18 -0700
  25. +
  26. +rdesktop (1.6.0-2ubuntu1) intrepid; urgency=low
  27. +
  28. + * Merge from Debian unstable (LP: #84072), remaining Ubuntu changes:
  29. + - Build with ALSA support.
  30. + - Add viewport patch.
  31. + - Add patch from Alt Linux that adds support for raw keyboard.
  32. +
  33. + -- Benjamin Drung <benjamin.drung@gmail.com> Tue, 19 Aug 2008 23:55:43 +0200
  34. +
  35. rdesktop (1.6.0-2) unstable; urgency=low
  36.  
  37. * Compile with IPv6 support (closes: #432299).
  38. @@ -30,12 +53,42 @@
  39.  
  40. -- Laszlo Boszormenyi (GCS) <gcs@debian.hu> Sat, 16 Aug 2008 14:40:47 +0000
  41.  
  42. +rdesktop (1.6.0-1ubuntu1) intrepid; urgency=low
  43. +
  44. + * Merge from Debian unstable
  45. + * Remaining Ubuntu changes:
  46. + - Replace x-dev with libx11-dev in Build-Depends.
  47. + - Build with ALSA support.
  48. + - Add viewport patch.
  49. + * Add patch from Alt Linux that adds support for raw keyboard.
  50. + (LP: #251709)
  51. +
  52. + -- Steve Kowalik <stevenk@ubuntu.com> Mon, 28 Jul 2008 12:49:31 +1000
  53. +
  54. rdesktop (1.6.0-1) unstable; urgency=low
  55.  
  56. * New stable upstream release (closes: #484071).
  57.  
  58. -- Laszlo Boszormenyi (GCS) <gcs@debian.hu> Wed, 04 Jun 2008 09:24:17 +0200
  59.  
  60. +rdesktop (1.6.0-0ubuntu2) intrepid; urgency=low
  61. +
  62. + * Add in dpatch.
  63. + * Merge viewport patch from the package in the ubuntu-mobile PPA.
  64. + * Munge Maintainer as per spec.
  65. +
  66. + -- Steve Kowalik <stevenk@ubuntu.com> Fri, 27 Jun 2008 14:53:29 +1000
  67. +
  68. +rdesktop (1.6.0-0ubuntu1) intrepid; urgency=low
  69. +
  70. + * merge new upstream version. LP: #235160
  71. + * new upstream fixes security issues. LP: #228193
  72. + * replace x-dev with libx11-dev in build-depends.
  73. + * build with alsa support. add libasound2-dev and libsamplerate to build
  74. + dependencies. LP: #231997
  75. +
  76. + -- Reinhard Tartler <siretart@tauware.de> Tue, 27 May 2008 23:48:23 +0200
  77. +
  78. rdesktop (1.5.0-4+cvs20071006) unstable; urgency=high
  79.  
  80. * Fix three security bugs by backporting them to this CVS snapshot, namely
  81. @@ -195,0 +249 @@
  82. +
  83. diff -u rdesktop-1.6.0/debian/control rdesktop-1.6.0/debian/control
  84. --- rdesktop-1.6.0/debian/control
  85. +++ rdesktop-1.6.0/debian/control
  86. @@ -1,7 +1,8 @@
  87. Source: rdesktop
  88. Section: x11
  89. Priority: optional
  90. -Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.hu>
  91. +Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
  92. +XSBC-Original-Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.hu>
  93. Build-Depends: debhelper (>= 6.0.0), dpatch (>= 2.0.9), pkg-config, autotools-dev, libasound2-dev, libxt-dev, libx11-dev, libssl-dev
  94. Standards-Version: 3.8.2
  95.  
  96. diff -u rdesktop-1.6.0/debian/rules rdesktop-1.6.0/debian/rules
  97. --- rdesktop-1.6.0/debian/rules
  98. +++ rdesktop-1.6.0/debian/rules
  99. @@ -26,7 +26,7 @@
  100. 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
  101.  
  102.  
  103. -build: build-stamp
  104. +build: patch-stamp build-stamp
  105.  
  106. build-stamp: patch-stamp config.status
  107. dh_testdir
  108. @@ -35,7 +35,8 @@
  109.  
  110. touch build-stamp
  111.  
  112. -clean: unpatch
  113. +clean: clean-patched unpatch
  114. +clean-patched:
  115. dh_testdir
  116. dh_testroot
  117. rm -f build-stamp
  118. diff -u rdesktop-1.6.0/debian/patches/00list rdesktop-1.6.0/debian/patches/00list
  119. --- rdesktop-1.6.0/debian/patches/00list
  120. +++ rdesktop-1.6.0/debian/patches/00list
  121. @@ -16,6 +16,8 @@
  122. # 5 -> General code
  123. # 8 -> Fix for some architectures support
  124. #
  125. +01_paging.dpatch
  126. +02_raw_keyboard_support.dpatch
  127. 32_it_keymap.dpatch
  128. 35_force_rdpdr.dpatch
  129. 80_config.dpatch
  130. only in patch2:
  131. unchanged:
  132. --- rdesktop-1.6.0.orig/debian/patches/02_raw_keyboard_support.dpatch
  133. +++ rdesktop-1.6.0/debian/patches/02_raw_keyboard_support.dpatch
  134. @@ -0,0 +1,331 @@
  135. +#! /bin/sh /usr/share/dpatch/dpatch-run
  136. +## 02_raw_keyboard_suppport.dpatch by Alt Linux.
  137. +##
  138. +## All lines beginning with `## DP:' are a description of the patch.
  139. +## DP: Add support for raw keyboard.
  140. +
  141. +@DPATCH@
  142. +diff -urN rdesktop.orig/rdesktop.c rdesktop/rdesktop.c
  143. +--- rdesktop.orig/rdesktop.c 2007-02-10 07:48:50 +0200
  144. ++++ rdesktop/rdesktop.c 2007-04-21 19:27:14 +0300
  145. +@@ -91,6 +91,7 @@
  146. + RD_BOOL g_owncolmap = False;
  147. + RD_BOOL g_ownbackstore = True; /* We can't rely on external BackingStore */
  148. + RD_BOOL g_seamless_rdp = False;
  149. ++RD_BOOL g_raw_keyboard = False;
  150. + uint32 g_embed_wnd;
  151. + uint32 g_rdp5_performanceflags =
  152. + RDP5_NO_WALLPAPER | RDP5_NO_FULLWINDOWDRAG | RDP5_NO_MENUANIMATIONS;
  153. +@@ -211,6 +212,7 @@
  154. + fprintf(stderr, " -0: attach to console\n");
  155. + fprintf(stderr, " -4: use RDP version 4\n");
  156. + fprintf(stderr, " -5: use RDP version 5 (default)\n");
  157. ++ fprintf(stderr, " -y: use raw keyboard (default no)\n");
  158. + }
  159. +
  160. + static void
  161. +@@ -450,7 +452,7 @@
  162. + #endif
  163. +
  164. + while ((c = getopt(argc, argv,
  165. +- VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045h?")) != -1)
  166. ++ VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045yh?")) != -1)
  167. + {
  168. + switch (c)
  169. + {
  170. +@@ -782,6 +784,9 @@
  171. + case '5':
  172. + g_use_rdp5 = True;
  173. + break;
  174. ++ case 'y':
  175. ++ g_raw_keyboard = True;
  176. ++ break;
  177. +
  178. + case 'h':
  179. + case '?':
  180. +diff -urN rdesktop.orig/scancodes.h rdesktop/scancodes.h
  181. +--- rdesktop.orig/scancodes.h 2003-10-28 05:20:43 +0200
  182. ++++ rdesktop/scancodes.h 2007-04-21 19:27:30 +0300
  183. +@@ -152,7 +152,7 @@
  184. + #define SCANCODE_KEY_43 0x1c
  185. + #define SCANCODE_CHAR_ENTER SCANCODE_KEY_43
  186. +
  187. +-#define SCANCODE_KEY_44 0x2a
  188. ++#define SCANCODE_KEY_44 (SCANCODE_EXTENDED | 0x2a)
  189. + #define SCANCODE_CHAR_LSHIFT SCANCODE_KEY_44
  190. +
  191. + /* Only on international keyboard */
  192. +@@ -191,7 +191,7 @@
  193. + /* Only on Brazilian and some Far East keyboards */
  194. + #define SCANCODE_KEY_56 0x73
  195. +
  196. +-#define SCANCODE_KEY_57 0x36
  197. ++#define SCANCODE_KEY_57 (SCANCODE_EXTENDED | 0x36)
  198. + #define SCANCODE_CHAR_RSHIFT SCANCODE_KEY_57
  199. +
  200. + #define SCANCODE_KEY_58 0x1d
  201. +@@ -352,10 +352,15 @@
  202. +
  203. + /* Key 124: The Print Screen sequence is complicated, and
  204. + hardcoded in xkeymap.c */
  205. ++#define SCANCODE_KEY_124 0xff
  206. ++#define SCANCODE_CHAR_PRINT SCANCODE_KEY_124
  207. +
  208. + #define SCANCODE_KEY_125 0x46
  209. + #define SCANCODE_CHAR_SCROLLLOCK SCANCODE_KEY_125
  210. +
  211. ++#define SCANCODE_KEY_126 (SCANCODE_EXTENDED | 0x59)
  212. ++#define SCANCODE_CHAR_PAUSE SCANCODE_KEY_126
  213. ++
  214. + /* Key 126: The Pause and Break sequences is complicated, and
  215. + hardcoded in xkeymap.c */
  216. +
  217. +diff -urN rdesktop.orig/xkeymap.c rdesktop/xkeymap.c
  218. +--- rdesktop.orig/xkeymap.c 2007-03-20 17:32:43 +0200
  219. ++++ rdesktop/xkeymap.c 2007-04-21 19:47:15 +0300
  220. +@@ -55,6 +55,7 @@
  221. + static int min_keycode;
  222. + static uint16 remote_modifier_state = 0;
  223. + static uint16 saved_remote_modifier_state = 0;
  224. ++static uint32 vkmenu, vkcontrol, vklshift, vkrshift, vknumlock;
  225. +
  226. + static void update_modifier_state(uint8 scancode, RD_BOOL pressed);
  227. +
  228. +@@ -949,6 +950,7 @@
  229. + rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT);
  230. +
  231. + reset_winkey(ev_time);
  232. ++ vknumlock = get_key_state(state, XK_Num_Lock);
  233. +
  234. + if (g_numlock_sync)
  235. + rdp_send_input(ev_time, RDP_INPUT_SYNCHRONIZE, 0, ui_get_numlock_state(state), 0);
  236. +@@ -1034,3 +1036,153 @@
  237. + rdp_send_input(time, RDP_INPUT_SCANCODE, flags, scancode, 0);
  238. + }
  239. + }
  240. ++
  241. ++typedef unsigned char byte;
  242. ++typedef unsigned int dword;
  243. ++
  244. ++static byte vkscancode[ 128] = {
  245. ++ /* 00 - 07 */ 0, 0, 0, 0, 0, 0, 0, 0,
  246. ++ /* 08 - 0f */ 0, SCANCODE_CHAR_ESC, SCANCODE_CHAR_1, SCANCODE_CHAR_2, SCANCODE_CHAR_3, SCANCODE_CHAR_4, SCANCODE_CHAR_5, SCANCODE_CHAR_6,
  247. ++ /* 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,
  248. ++ /* 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,
  249. ++ /* 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,
  250. ++ /* 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,
  251. ++ /* 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,
  252. ++ /* 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,
  253. ++ /* 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,
  254. ++ /* 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,
  255. ++ /* 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,
  256. ++ /* 58 - 5f */ SCANCODE_CHAR_NUMERIC2, SCANCODE_CHAR_NUMERIC3, SCANCODE_CHAR_NUMERIC0, SCANCODE_CHAR_NUMERICDOT, 0, 0, 0, SCANCODE_CHAR_F11,
  257. ++ /* 60 - 67 */ SCANCODE_CHAR_F12, SCANCODE_CHAR_HOME, SCANCODE_CHAR_UPARROW, SCANCODE_CHAR_PAGEUP, SCANCODE_CHAR_LARROW, 0, SCANCODE_CHAR_RARROW, SCANCODE_CHAR_END,
  258. ++ /* 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,
  259. ++ /* 70 - 77 */ SCANCODE_CHAR_NUMERICSLASH, SCANCODE_CHAR_RALT, 0, SCANCODE_CHAR_LWIN, SCANCODE_CHAR_RWIN, SCANCODE_CHAR_APPLICATION, 0, 0,
  260. ++ /* 78 - 7f */ 0, 0, 0, 0, 0, 0, 0, 0
  261. ++};
  262. ++
  263. ++
  264. ++static inline int vk_handle_special_keys( uint32 keysym, uint32 ev_time, RD_BOOL pressed) {
  265. ++
  266. ++ RD_BOOL leftkey = 0;
  267. ++
  268. ++ switch( keysym) {
  269. ++ case SCANCODE_CHAR_NUMLOCK:
  270. ++ if( !pressed)
  271. ++ vknumlock = !vknumlock;
  272. ++ return 0;
  273. ++
  274. ++ case SCANCODE_CHAR_ENTER:
  275. ++ case SCANCODE_CHAR_NUMERICENTER:
  276. ++ if( pressed && vkmenu && vkcontrol) {
  277. ++ /* Ctrl-Alt-Enter: toggle full screen */
  278. ++ xwin_toggle_fullscreen();
  279. ++ return 1;
  280. ++ }
  281. ++ return 0;
  282. ++
  283. ++ case SCANCODE_CHAR_PAUSE:
  284. ++ if( pressed) {
  285. ++ if( vkcontrol) {
  286. ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, (SCANCODE_EXTENDED | 0x46));
  287. ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, (SCANCODE_EXTENDED | 0xc6));
  288. ++ }
  289. ++ else {
  290. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0);
  291. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x1d, 0);
  292. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x45, 0);
  293. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0);
  294. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x9d, 0);
  295. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xc5, 0);
  296. ++ }
  297. ++ }
  298. ++ else {
  299. ++ /* Release Left Ctrl */
  300. ++ if( vkcontrol)
  301. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0);
  302. ++ }
  303. ++ return 1;
  304. ++
  305. ++ case SCANCODE_CHAR_PRINT:
  306. ++ if( vkmenu)
  307. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, 0x54, 0);
  308. ++ else if( vkcontrol && (vklshift || vklshift))
  309. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, SCANCODE_EXTENDED|0x37, 0);
  310. ++ else {
  311. ++#if 0
  312. ++ if( pressed) {
  313. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, SCANCODE_CHAR_LSHIFT, 0);
  314. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, SCANCODE_EXTENDED|0x37, 0);
  315. ++ }
  316. ++ else {
  317. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, SCANCODE_EXTENDED|0x37, 0);
  318. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT, 0);
  319. ++ }
  320. ++#endif
  321. ++ }
  322. ++ return 1;
  323. ++
  324. ++ case SCANCODE_CHAR_LWIN:
  325. ++ leftkey = True;
  326. ++ case SCANCODE_CHAR_RWIN:
  327. ++ if( pressed) {
  328. ++ if( g_use_rdp5) {
  329. ++ rdp_send_scancode(ev_time, RDP_KEYPRESS, keysym);
  330. ++ }
  331. ++ else {
  332. ++ /* RDP4 doesn't support winkey. Fake with Ctrl-Esc */
  333. ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, SCANCODE_CHAR_LCTRL);
  334. ++ rdp_send_scancode( ev_time, RDP_KEYPRESS, SCANCODE_CHAR_ESC);
  335. ++ }
  336. ++ }
  337. ++ else {
  338. ++ if( g_use_rdp5) {
  339. ++ rdp_send_scancode(ev_time, RDP_KEYRELEASE, keysym);
  340. ++ }
  341. ++ else {
  342. ++ rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_ESC);
  343. ++ rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LCTRL);
  344. ++ }
  345. ++ }
  346. ++ return 1;
  347. ++
  348. ++ case SCANCODE_CHAR_INSERT:
  349. ++ case SCANCODE_CHAR_DELETE:
  350. ++ case SCANCODE_CHAR_LARROW:
  351. ++ case SCANCODE_CHAR_HOME:
  352. ++ case SCANCODE_CHAR_END:
  353. ++ case SCANCODE_CHAR_UPARROW:
  354. ++ case SCANCODE_CHAR_DNARROW:
  355. ++ case SCANCODE_CHAR_PAGEUP:
  356. ++ case SCANCODE_CHAR_PAGEDOWN:
  357. ++ case SCANCODE_CHAR_RARROW:
  358. ++ rdp_send_scancode( ev_time, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);
  359. ++ rdp_send_scancode( ev_time, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, keysym);
  360. ++ return 1;
  361. ++ }
  362. ++ return 0;
  363. ++}
  364. ++
  365. ++void vk_handle_key( XKeyEvent *xkey) {
  366. ++
  367. ++ uint32 vk, ev_time, pressed = (xkey->type == KeyPress);
  368. ++
  369. ++ vk = vkscancode[ xkey->keycode];
  370. ++ DEBUG_KBD(( "vk_handle_key( scancode=0x%x) vk = 0x%x\n", xkey->keycode, vk));
  371. ++
  372. ++ if( !vk)
  373. ++ return;
  374. ++
  375. ++ ev_time = time( 0);
  376. ++
  377. ++ if( (vk == SCANCODE_CHAR_LCTRL) || (vk == SCANCODE_CHAR_RCTRL))
  378. ++ vkcontrol = pressed;
  379. ++ else if( (vk == SCANCODE_CHAR_LALT) || (vk == SCANCODE_CHAR_RALT))
  380. ++ vkmenu = pressed;
  381. ++ else if( vk == SCANCODE_CHAR_LSHIFT)
  382. ++ vklshift = pressed;
  383. ++ else if( vk == SCANCODE_CHAR_RSHIFT)
  384. ++ vkrshift = pressed;
  385. ++ else if( vk_handle_special_keys( vk, ev_time, pressed))
  386. ++ return;
  387. ++
  388. ++ rdp_send_input( ev_time, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, vk, 0);
  389. ++}
  390. +���� rdesktop.orig/xkeymap.o � rdesktop/xkeymap.o ���������
  391. +diff -urN rdesktop.orig/xwin.c rdesktop/xwin.c
  392. +--- rdesktop.orig/xwin.c 2007-04-12 19:04:25 +0300
  393. ++++ rdesktop/xwin.c 2007-04-21 19:39:42 +0300
  394. +@@ -28,6 +28,8 @@
  395. + #include <strings.h>
  396. + #include "rdesktop.h"
  397. + #include "xproto.h"
  398. ++#include "X11/XKBlib.h"
  399. ++#include "X11/keysym.h"
  400. +
  401. + extern int g_width;
  402. + extern int g_height;
  403. +@@ -43,6 +45,7 @@
  404. + As of RDP 5.1, it may be 8, 15, 16 or 24. */
  405. + extern int g_server_depth;
  406. + extern int g_win_button_size;
  407. ++extern RD_BOOL g_raw_keyboard;
  408. +
  409. + Display *g_display;
  410. + Time g_last_gesturetime;
  411. +@@ -127,6 +130,8 @@
  412. + so its endianess doesn't matter)
  413. + */
  414. + static RD_BOOL g_no_translate_image = False;
  415. ++static RD_BOOL g_modeswitch_down = False;
  416. ++
  417. +
  418. + /* endianness */
  419. + static RD_BOOL g_host_be;
  420. +@@ -1953,6 +1958,8 @@
  421. + }
  422. + }
  423. +
  424. ++extern void vk_handle_key( XKeyEvent *xkey);
  425. ++
  426. +
  427. + /* Process events in Xlib queue
  428. + Returns 0 after user quit, 1 otherwise */
  429. +@@ -1977,6 +1984,12 @@
  430. + continue;
  431. + }
  432. +
  433. ++ if( g_raw_keyboard && ((xevent.type == KeyPress) || (xevent.type == KeyRelease))) {
  434. ++ g_last_gesturetime = xevent.xkey.time;
  435. ++ vk_handle_key( (XKeyEvent*)&xevent);
  436. ++ continue;
  437. ++ }
  438. ++
  439. + switch (xevent.type)
  440. + {
  441. + case VisibilityNotify:
  442. +@@ -2016,6 +2029,11 @@
  443. + str, sizeof(str), &keysym, NULL);
  444. + }
  445. +
  446. ++
  447. ++ // Mode_switch during XGrabKeyboard fix: Ungrab Keyboard during Mode_switch
  448. ++ if ( keysym == XK_Mode_switch ) g_modeswitch_down = True;
  449. ++ if ( g_focused && g_modeswitch_down ) XUngrabKeyboard(g_display, CurrentTime);
  450. ++
  451. + DEBUG_KBD(("KeyPress for keysym (0x%lx, %s)\n", keysym,
  452. + get_ksname(keysym)));
  453. +
  454. +@@ -2032,6 +2050,11 @@
  455. + XLookupString((XKeyEvent *) & xevent, str,
  456. + sizeof(str), &keysym, NULL);
  457. +
  458. ++
  459. ++ // Mode_switch during XGrabKeyboard fix: Regrab Keyboard after Mode_switch
  460. ++ if ( keysym == XK_Mode_switch ) g_modeswitch_down = False;
  461. ++ if ( g_focused && !g_modeswitch_down ) XGrabKeyboard(g_display, g_wnd, True, GrabModeAsync, GrabModeAsync, CurrentTime);
  462. ++
  463. + DEBUG_KBD(("\nKeyRelease for keysym (0x%lx, %s)\n", keysym,
  464. + get_ksname(keysym)));
  465. +
  466. only in patch2:
  467. unchanged:
  468. --- rdesktop-1.6.0.orig/debian/patches/01_paging.dpatch
  469. +++ rdesktop-1.6.0/debian/patches/01_paging.dpatch
  470. @@ -0,0 +1,376 @@
  471. +#! /bin/sh /usr/share/dpatch/dpatch-run
  472. +## 01_paging.dpatch by Adilson Oliveira <adilson@ubuntu.com>
  473. +##
  474. +## All lines beginning with `## DP:' are a description of the patch.
  475. +## DP: Add viewport mode, suitable for small screens.
  476. +
  477. +@DPATCH@
  478. +diff -Nur -x '*.orig' -x '*~' rdesktop-1.5.0.ume/proto.h rdesktop-1.5.0.ume.new/proto.h
  479. +--- rdesktop-1.5.0.ume/proto.h 2008-03-28 17:31:19.000000000 -0300
  480. ++++ rdesktop-1.5.0.ume.new/proto.h 2008-03-28 17:31:24.000000000 -0300
  481. +@@ -235,7 +235,7 @@
  482. + RD_BOOL get_key_state(unsigned int state, uint32 keysym);
  483. + RD_BOOL ui_init(void);
  484. + void ui_deinit(void);
  485. +-RD_BOOL ui_create_window(void);
  486. ++RD_BOOL ui_create_window(RD_BOOL ToggleFullscreen);
  487. + void ui_resize_window(void);
  488. + void ui_destroy_window(void);
  489. + void xwin_toggle_fullscreen(void);
  490. +diff -Nur -x '*.orig' -x '*~' rdesktop-1.5.0.ume/rdesktop.c rdesktop-1.5.0.ume.new/rdesktop.c
  491. +--- rdesktop-1.5.0.ume/rdesktop.c 2008-03-28 17:31:19.000000000 -0300
  492. ++++ rdesktop-1.5.0.ume.new/rdesktop.c 2008-03-28 17:31:42.000000000 -0300
  493. +@@ -103,6 +103,13 @@
  494. + char g_redirect_cookie[128];
  495. + uint32 g_redirect_flags = 0;
  496. +
  497. ++/* For viewport mode */
  498. ++int xo = 0;
  499. ++int yo = 0;
  500. ++int perm_xo = 0; // Safe to keep in 0 for now
  501. ++int perm_yo = 0;
  502. ++RD_BOOL viewport_mode = False;
  503. ++
  504. + #ifdef WITH_RDPSND
  505. + RD_BOOL g_rdpsnd = False;
  506. + #endif
  507. +@@ -122,6 +129,7 @@
  508. + rdp2vnc_connect(char *server, uint32 flags, char *domain, char *password,
  509. + char *shell, char *directory);
  510. + #endif
  511. ++
  512. + /* Display usage information */
  513. + static void
  514. + usage(char *program)
  515. +@@ -563,6 +571,8 @@
  516. + g_pos |= (*p == '-') ? 4 : 1;
  517. + g_ypos = strtol(p, NULL, 10);
  518. + }
  519. ++ perm_xo = xo;
  520. ++ perm_yo = yo;
  521. +
  522. + break;
  523. +
  524. +@@ -947,7 +957,7 @@
  525. + memset(password, 0, sizeof(password));
  526. +
  527. + if (run_count == 0)
  528. +- if (!ui_create_window())
  529. ++ if (!ui_create_window(False))
  530. + continue_connect = False;
  531. +
  532. + if (continue_connect)
  533. +diff -Nur -x '*.orig' -x '*~' rdesktop-1.5.0.ume/xwin.c rdesktop-1.5.0.ume.new/xwin.c
  534. +--- rdesktop-1.5.0.ume/xwin.c 2008-03-28 17:31:19.000000000 -0300
  535. ++++ rdesktop-1.5.0.ume.new/xwin.c 2008-03-28 17:31:24.000000000 -0300
  536. +@@ -50,7 +50,11 @@
  537. + static int g_x_socket;
  538. + static Screen *g_screen;
  539. + Window g_wnd;
  540. +-
  541. ++extern BOOL viewport_mode;
  542. ++BOOL viewport_keys_enabled = False;
  543. ++BOOL viewport_mode_locked = False;
  544. ++Window g_viewport_wnd = 0;
  545. ++uint32 g_embed_wnd;
  546. + /* SeamlessRDP support */
  547. + typedef struct _seamless_group
  548. + {
  549. +@@ -134,6 +138,27 @@
  550. + ('host' is the machine running rdesktop; the host simply memcpy's
  551. + so its endianess doesn't matter)
  552. + */
  553. ++static Cursor viewportCursor;
  554. ++static int viewportLastX;
  555. ++static int viewportLastY;
  556. ++int g_viewport_width;
  557. ++int g_viewport_height;
  558. ++int g_saved_viewport_width = 0;
  559. ++int g_saved_viewport_height= 0;
  560. ++int g_saved_viewport_x= 0;
  561. ++int g_saved_viewport_y= 0;
  562. ++int g_saved_wnd_x = 0;
  563. ++int g_saved_wnd_y = 0;
  564. ++int g_wnd_x;
  565. ++int g_wnd_y;
  566. ++int viewport_x1;
  567. ++int viewport_y1;
  568. ++int xo;
  569. ++int yo;
  570. ++extern int perm_xo;
  571. ++extern int perm_yo;
  572. ++
  573. ++void MoveViewport(int hShift, int vShift);
  574. + static RD_BOOL g_no_translate_image = False;
  575. +
  576. + /* endianness */
  577. +@@ -524,7 +549,7 @@
  578. + return;
  579. + }
  580. +
  581. +- XChangeProperty(g_display, wnd, hintsatom, hintsatom, 32, PropModeReplace,
  582. ++ XChangeProperty(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, hintsatom, hintsatom, 32, PropModeReplace,
  583. + (unsigned char *) &motif_hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
  584. +
  585. + }
  586. +@@ -1722,7 +1747,7 @@
  587. + }
  588. +
  589. + RD_BOOL
  590. +-ui_create_window(void)
  591. ++ui_create_window(RD_BOOL ToggleFullscreen)
  592. + {
  593. + uint8 null_pointer_mask[1] = { 0x80 };
  594. + uint8 null_pointer_data[24] = { 0x00 };
  595. +@@ -1733,6 +1758,7 @@
  596. + int wndwidth, wndheight;
  597. + long input_mask, ic_input_mask;
  598. + XEvent xevent;
  599. ++ int x1, y1;
  600. +
  601. + wndwidth = g_fullscreen ? WidthOfScreen(g_screen) : g_width;
  602. + wndheight = g_fullscreen ? HeightOfScreen(g_screen) : g_height;
  603. +@@ -1767,7 +1793,75 @@
  604. + XSetForeground(g_display, g_gc, BlackPixelOfScreen(g_screen));
  605. + XFillRectangle(g_display, g_backstore, g_gc, 0, 0, g_width, g_height);
  606. + }
  607. +-
  608. ++ if ((((g_width >= WidthOfScreen(g_screen)*1.05)) ||
  609. ++ (g_height >= (HeightOfScreen(g_screen)*1.1))) && (ToggleFullscreen))
  610. ++ {
  611. ++ viewport_mode_locked = True;
  612. ++ viewport_keys_enabled = True;
  613. ++ }
  614. ++
  615. ++ if ((!g_embed_wnd) && (viewport_mode))
  616. ++ {
  617. ++ if (g_fullscreen)
  618. ++ {
  619. ++ x1 = (WidthOfScreen(g_screen) - g_width)/2;
  620. ++ y1 = (HeightOfScreen(g_screen) - g_height)/2;
  621. ++ g_viewport_width = (WidthOfScreen(g_screen));
  622. ++ g_viewport_height= (HeightOfScreen(g_screen));
  623. ++ }
  624. ++ else
  625. ++ {
  626. ++ if (!ToggleFullscreen)
  627. ++ {
  628. ++ xo = g_saved_viewport_x;
  629. ++ yo = g_saved_viewport_y;
  630. ++ }
  631. ++ if (g_saved_wnd_x == 0 && g_saved_wnd_y == 0)
  632. ++ {
  633. ++ x1 = y1 = 0;
  634. ++ }
  635. ++ else
  636. ++ {
  637. ++ x1 = g_saved_wnd_x;
  638. ++ y1 = g_saved_wnd_y;
  639. ++ }
  640. ++
  641. ++ if (g_saved_viewport_width && g_saved_viewport_height)
  642. ++ {
  643. ++ g_viewport_width = g_saved_viewport_width;
  644. ++ g_viewport_height = g_saved_viewport_height;
  645. ++ }
  646. ++ else
  647. ++ {
  648. ++ g_viewport_width = wndwidth < (WidthOfScreen(g_screen)*1.05) ? wndwidth : WidthOfScreen(g_screen)*3/4;
  649. ++ g_viewport_height= wndheight< (HeightOfScreen(g_screen)*1.1) ? wndheight: HeightOfScreen(g_screen)*3/4;
  650. ++ g_viewport_width = g_viewport_width & ~3;
  651. ++ }
  652. ++ }
  653. ++
  654. ++ attribs.override_redirect = g_fullscreen;
  655. ++
  656. ++ if (viewport_mode)
  657. ++ {
  658. ++ if ((xo == 0) && (yo == 0))
  659. ++ {
  660. ++ xo = (WidthOfScreen(g_screen) - g_viewport_width)/2;
  661. ++ yo = (HeightOfScreen(g_screen) - g_viewport_height)/2;
  662. ++ }
  663. ++ g_viewport_wnd = XCreateWindow (g_display, RootWindowOfScreen(g_screen), xo, yo, g_viewport_width, g_viewport_height,
  664. ++ 0, g_depth, InputOutput, g_visual, CWBackPixel | CWBackingStore | CWOverrideRedirect | CWColormap | CWBorderPixel, &attribs);
  665. ++
  666. ++ XSelectInput(g_display, g_viewport_wnd, ButtonPressMask | KeyPressMask |
  667. ++ StructureNotifyMask | (g_fullscreen ? EnterWindowMask : 0) |
  668. ++ (g_grab_keyboard ? (EnterWindowMask | LeaveWindowMask) : 0));
  669. ++
  670. ++ XReparentWindow (g_display, g_wnd, g_viewport_wnd, (ToggleFullscreen && g_fullscreen) ? perm_xo : 0, (ToggleFullscreen && g_fullscreen) ? perm_yo : 0);
  671. ++ }
  672. ++ }
  673. ++
  674. ++ /* Check XStoreName consistency */
  675. ++
  676. ++ XStoreName(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, g_title);
  677. + XStoreName(g_display, g_wnd, g_title);
  678. + ewmh_set_wm_name(g_wnd, g_title);
  679. +
  680. +@@ -1778,7 +1872,7 @@
  681. + if (classhints != NULL)
  682. + {
  683. + classhints->res_name = classhints->res_class = "rdesktop";
  684. +- XSetClassHint(g_display, g_wnd, classhints);
  685. ++ XSetClassHint(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, classhints);
  686. + XFree(classhints);
  687. + }
  688. +
  689. +@@ -1790,7 +1884,7 @@
  690. + sizehints->flags |= PPosition;
  691. + sizehints->min_width = sizehints->max_width = g_width;
  692. + sizehints->min_height = sizehints->max_height = g_height;
  693. +- XSetWMNormalHints(g_display, g_wnd, sizehints);
  694. ++ XSetWMNormalHints(g_display, g_viewport_wnd ? g_viewport_wnd : g_wnd, sizehints);
  695. + XFree(sizehints);
  696. + }
  697. +
  698. +@@ -1812,9 +1906,15 @@
  699. + }
  700. +
  701. + XSelectInput(g_display, g_wnd, input_mask);
  702. +- XMapWindow(g_display, g_wnd);
  703. ++ if (viewport_mode)
  704. ++ {
  705. ++ XMapWindow (g_display, g_viewport_wnd);
  706. ++ }
  707. ++
  708. ++ XMapWindow(g_display, g_wnd);
  709. ++
  710. ++ /* wait for VisibilityNotify */
  711. +
  712. +- /* wait for VisibilityNotify */
  713. + do
  714. + {
  715. + XMaskEvent(g_display, VisibilityChangeMask, &xevent);
  716. +@@ -1876,7 +1976,14 @@
  717. + if (g_IC != NULL)
  718. + XDestroyIC(g_IC);
  719. +
  720. +- XDestroyWindow(g_display, g_wnd);
  721. ++ if (g_viewport_wnd)
  722. ++ {
  723. ++ XDestroyWindow (g_display, g_viewport_wnd);
  724. ++ }
  725. ++ else
  726. ++ {
  727. ++ XDestroyWindow(g_display, g_wnd);
  728. ++ }
  729. + }
  730. +
  731. + void
  732. +@@ -1897,7 +2004,7 @@
  733. +
  734. + ui_destroy_window();
  735. + g_fullscreen = !g_fullscreen;
  736. +- ui_create_window();
  737. ++ ui_create_window(True);
  738. +
  739. + XDefineCursor(g_display, g_wnd, g_current_cursor);
  740. +
  741. +@@ -2101,6 +2208,21 @@
  742. + xevent.xmotion.y_root - g_move_y_offset);
  743. + break;
  744. + }
  745. ++
  746. ++ if (viewportCursor)
  747. ++ {
  748. ++ /*
  749. ++ * Pointer is in viewport navigation mode.
  750. ++ */
  751. ++
  752. ++ MoveViewport(viewportLastX - xevent.xmotion.x_root,
  753. ++ viewportLastY - xevent.xmotion.y_root);
  754. ++
  755. ++ viewportLastX = xevent.xmotion.x_root;
  756. ++ viewportLastY = xevent.xmotion.y_root;
  757. ++
  758. ++ break;
  759. ++ }
  760. +
  761. + if (g_fullscreen && !g_focused)
  762. + XSetInputFocus(g_display, g_wnd, RevertToPointerRoot,
  763. +@@ -3286,6 +3408,83 @@
  764. +
  765. + XFree(image);
  766. + }
  767. ++void MoveViewport(int hShift, int vShift)
  768. ++{
  769. ++ int newX;
  770. ++ int newY;
  771. ++ Bool do_move = False;
  772. ++ int viewportXSpan = g_viewport_width - g_width;
  773. ++ int viewportYSpan = g_viewport_height - g_height;
  774. ++
  775. ++ if (!g_viewport_wnd)
  776. ++ {
  777. ++ return;
  778. ++ }
  779. ++
  780. ++ /*
  781. ++ * We must keep x coordinate between viewportXSpan and zero, if viewportXSpan
  782. ++ * is less then zero. If viewportXSpan is greater or equal to zero, it means
  783. ++ * the agent root window has a size smaller than the agent default window.
  784. ++ * In this case we keep the old coordinate.
  785. ++ */
  786. ++
  787. ++ if (viewportXSpan < 0)
  788. ++ {
  789. ++ newX = g_wnd_x - hShift;
  790. ++
  791. ++ if (newX > 0)
  792. ++ {
  793. ++ newX = 0;
  794. ++ }
  795. ++ else if (newX < viewportXSpan)
  796. ++ {
  797. ++ newX = viewportXSpan;
  798. ++ }
  799. ++ }
  800. ++ else if (viewportXSpan == 0)
  801. ++ {
  802. ++ newX = 0;
  803. ++ }
  804. ++ else
  805. ++ {
  806. ++ newX = g_wnd_x;
  807. ++ }
  808. ++
  809. ++ if (viewportYSpan < 0)
  810. ++ {
  811. ++ newY = g_wnd_y - vShift;
  812. ++ if (newY > 0)
  813. ++ {
  814. ++ newY = 0;
  815. ++ }
  816. ++ else if (newY < viewportYSpan)
  817. ++ {
  818. ++ newY = viewportYSpan;
  819. ++ }
  820. ++ }
  821. ++ else if (viewportYSpan == 0)
  822. ++ {
  823. ++ newY = 0;
  824. ++ }
  825. ++ else
  826. ++ {
  827. ++ newY = g_wnd_y;
  828. ++ }
  829. ++ if (newX != g_wnd_x)
  830. ++ {
  831. ++ g_wnd_x = newX;
  832. ++ do_move = True;
  833. ++ }
  834. ++ if (newY != g_wnd_y)
  835. ++ {
  836. ++ g_wnd_y = newY;
  837. ++ do_move = True;
  838. ++ }
  839. ++
  840. ++ if (do_move)
  841. ++ XMoveWindow(g_display, g_wnd, g_wnd_x, g_wnd_y);
  842. ++}
  843. ++
  844. +
  845. + /* these do nothing here but are used in uiports */
  846. + void
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement