#include <typeinfo>
#include <X11/extensions/Xinerama.h>
+#ifdef HAVE_XV
#include <X11/extensions/Xvlib.h>
+#endif
#include <X11/extensions/shape.h>
#include <X11/XF86keysym.h>
#include <X11/Sunkeysym.h>
XFree(xinerama_info);
xinerama_screens = 0;
xinerama_info = 0;
+#ifdef HAVE_XV
if( xvideo_port_id >= 0 )
XvUngrabPort(display, xvideo_port_id, CurrentTime);
-
+#endif
unlock_window();
// Must be last reference to display.
// _XftDisplayInfo needs a lock.
wkey_string_length = 0;
if( input_context ) {
+ wchar_t wkey[4];
wkey_string_length = XwcLookupString(input_context,
- (XKeyEvent*)event, wkey_string, 4, &keysym, 0);
+ (XKeyEvent*)event, wkey, 4, &keysym, 0);
+ for( int i=0; i<wkey_string_length; ++i )
+ wkey_string[i] = wkey[i];
//printf("keysym_lookup 1 %d %d %lx %x %x %x %x\n", wkey_string_length, keysym,
// wkey_string[0], wkey_string[1], wkey_string[2], wkey_string[3]);
case XK_F10: key_pressed = KEY_F10; break;
case XK_F11: key_pressed = KEY_F11; break;
case XK_F12: key_pressed = KEY_F12; break;
-
+// activates remote
case XK_Menu: key_pressed = KPMENU; break; /* menu */
-// remote control
-// above case XK_KP_Enter: key_pressed = KPENTER; break; /* check */
- case XF86XK_MenuKB: key_pressed = KPMENU; break; /* menu */
-// intercepted case XF86XK_PowerDown: key_pressed = KPPOWER; break; /* Power */
- case XF86XK_Launch1: key_pressed = KPTV; break; /* TV */
- case XF86XK_Launch2: key_pressed = KPDVD; break; /* DVD */
-// intercepted case XF86XK_WWW: key_pressed = KPWWEB; break; /* WEB */
- case XF86XK_Launch3: key_pressed = KPBOOK; break; /* book */
- case XF86XK_Launch4: key_pressed = KPHAND; break; /* hand */
- case XF86XK_Reply: key_pressed = KPTMR; break; /* timer */
- case SunXK_Front: key_pressed = KPMAXW; break; /* max */
-// above case XK_Left: key_pressed = LEFT; break; /* left */
-// above case XK_Right: key_pressed = RIGHT; break; /* right */
-// above case XK_Down: key_pressed = DOWN; break; /* down */
-// above case XK_Up: key_pressed = UP; break; /* up */
-// above case XK_SPACE: key_pressed = KPSPACE; break; /* ok */
-// intercepted case XF86XK_AudioRaiseVolume: key_pressed = KPVOLU; break; /* VOL + */
-// intercepted case XF86XK_AudioMute: key_pressed = KPMUTE; break; /* MUTE */
-// intercepted case XF86XK_AudioLowerVolume: key_pressed = KPVOLD; break; /* VOL - */
- case XF86XK_ScrollUp: key_pressed = KPCHUP; break; /* CH + */
- case XF86XK_ScrollDown: key_pressed = KPCHDN; break; /* CH - */
- case XF86XK_AudioRecord: key_pressed = KPRECD; break; /* ( o) red */
- case XF86XK_Forward: key_pressed = KPPLAY; break; /* ( >) */
- case XK_Redo: key_pressed = KPFWRD; break; /* (>>) */
- case XF86XK_Back: key_pressed = KPBACK; break; /* (<<) */
- case XK_Cancel: key_pressed = KPSTOP; break; /* ([]) */
- case XK_Pause: key_pressed = KPAUSE; break; /* ('') */
default:
key_pressed = keysym & 0xff;
"`abcdefghijklmnopqrstuvwxyz{|}~");
for( int font=SMALLFONT; font<=LARGEFONT; ++font ) {
set_font(font);
- draw_text(5,5, text, 0);
+ draw_text(5,5, text);
}
set_font(cur_font);
XUngrabServer(display);
return w;
}
-int BC_WindowBase::get_text_width(int font, const wchar_t *text, int length)
+int BC_WindowBase::get_text_width(int font, const wchr_t *text, int length)
{
int i, j, w = 0;
- if( length < 0 ) length = wcslen(text);
+ if( length < 0 ) length = wstrlen(text);
for( i=j=0; i<length && text[i]; ++i ) {
if( text[i] != '\n' ) continue;
int BC_WindowBase::grab_port_id(int color_model)
{
+#ifdef HAVE_XV
if( !get_resources()->use_xvideo || // disabled
!get_resources()->use_shm ) // Only local server is fast enough.
return -1;
}
XvFreeAdaptorInfo(info);
-
return xvideo_port_id;
+#else
+ return -1;
+#endif
}
return top_level->ctrl_mask;
}
-wchar_t* BC_WindowBase::get_wkeystring(int *length)
+wchr_t* BC_WindowBase::get_wkeystring(int *length)
{
if(length)
*length = top_level->wkey_string_length;
int BC_WindowBase::raise_window(int do_flush)
{
+ if( hidden ) return 1;
+ if( wait_viewable(500) ) return 1;
XRaiseWindow(top_level->display, win);
if(do_flush) XFlush(top_level->display);
return 0;
XSetInputFocus(top_level->display, top_level->win, RevertToParent, CurrentTime);
}
+int BC_WindowBase::wait_viewable(int ms)
+{
+ Timer timer;
+ XWindowAttributes xwa;
+ do {
+ XGetWindowAttributes(top_level->display, top_level->win, &xwa);
+ if( xwa.map_state == IsViewable ) return 0;
+ usleep(10000);
+ } while( timer.get_difference() < ms );
+ return 1;
+}
+