summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphintuka <phintuka>2008-11-15 13:41:56 +0000
committerphintuka <phintuka>2008-11-15 13:41:56 +0000
commit474b4e8acf587ffe300b903da974b32da6bedd24 (patch)
treeb3f4863eb31534a65524038c8b1e8fa38a576592
parentb12c3226971ee6e752a57f7eec055f0af2b4bbd6 (diff)
downloadxineliboutput-474b4e8acf587ffe300b903da974b32da6bedd24.tar.gz
xineliboutput-474b4e8acf587ffe300b903da974b32da6bedd24.tar.bz2
Use send_event / xine_is_finished to set / check exit condition.
use send_event in hotkey handling. Added gui_hotkeys flag. Enabling from command-line is still missing. Removed last FE_STANDALONE check.
-rw-r--r--xine_sxfe_frontend.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/xine_sxfe_frontend.c b/xine_sxfe_frontend.c
index 08baa69e..e83ed012 100644
--- a/xine_sxfe_frontend.c
+++ b/xine_sxfe_frontend.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: xine_sxfe_frontend.c,v 1.101 2008-11-15 13:33:14 phintuka Exp $
+ * $Id: xine_sxfe_frontend.c,v 1.102 2008-11-15 13:41:56 phintuka Exp $
*
*/
@@ -143,6 +143,7 @@ typedef struct sxfe_s {
uint8_t check_move : 1;
uint8_t dragging : 1;
uint8_t hud : 1;
+ uint8_t gui_hotkeys : 1;
/* HUD stuff */
#ifdef HAVE_XRENDER
@@ -1140,6 +1141,11 @@ static int sxfe_display_open(frontend_t *this_gen, int width, int height, int fu
this->xinerama_screen = -1;
+#if defined(XINELIBOUTPUT_FE_TOGGLE_FULLSCREEN) || defined(INTERPRET_LIRC_KEYS)
+ /* #warning TODO: make this command-line parameter */
+ this->gui_hotkeys = 1;
+#endif
+
/*
* init x11 stuff
*/
@@ -1384,40 +1390,40 @@ static void sxfe_interrupt(frontend_t *this_gen)
* XKeyEvent handler
*
*/
-static int XKeyEvent_handler(sxfe_t *this, XKeyEvent *kev)
+static void XKeyEvent_handler(sxfe_t *this, XKeyEvent *kev)
{
if(kev->keycode) {
KeySym ks;
char buffer[20];
XComposeStatus status;
+ const char *fe_event = NULL;
XLockDisplay (this->display);
XLookupString(kev, buffer, sizeof(buffer), &ks, &status);
XUnlockDisplay (this->display);
switch(ks) {
-#if defined(XINELIBOUTPUT_FE_TOGGLE_FULLSCREEN) || defined(INTERPRET_LIRC_KEYS)
case XK_f:
case XK_F:
- sxfe_toggle_fullscreen((fe_t*)this);
- return 1;
+ if (this->gui_hotkeys)
+ fe_event = "TOGGLE_FULLSCREEN";
+ break;
case XK_d:
case XK_D:
- xine_set_param(this->x.stream, XINE_PARAM_VO_DEINTERLACE,
- xine_get_param(this->x.stream, XINE_PARAM_VO_DEINTERLACE) ? 0 : 1);
- return 1;
-#endif
-#ifdef FE_STANDALONE
+ if (this->gui_hotkeys)
+ fe_event = "TOGGLE_DEINTERLACE";
+ break;
case XK_Escape:
- this->x.fe.send_event((frontend_t*)this, "QUIT");
- return 0;
-#endif
- default:
- this->x.fe.send_input_event((frontend_t*)this, "XKeySym", XKeysymToString(ks), 0, 0);
- return 1;
+ if (!this->x.keypress) /* ESC exits only in remote mode */
+ fe_event = "QUIT";
+ break;
+ default:;
}
+ if (fe_event)
+ this->x.fe.send_event((frontend_t*)this, fe_event);
+ else
+ this->x.fe.send_input_event((frontend_t*)this, "XKeySym", XKeysymToString(ks), 0, 0);
}
- return 1;
}
/*
@@ -1611,8 +1617,7 @@ static int sxfe_run(frontend_t *this_gen)
case KeyPress:
case KeyRelease:
- if (! XKeyEvent_handler(this, (XKeyEvent *) &event))
- return 0;
+ XKeyEvent_handler(this, (XKeyEvent *) &event);
break;
case ClientMessage:
@@ -1621,11 +1626,13 @@ static int sxfe_run(frontend_t *this_gen)
if ( cmessage->message_type == this->xa_SXFE_INTERRUPT )
LOGDBG("ClientMessage: sxfe_interrupt");
- if ( cmessage->data.l[0] == this->xa_WM_DELETE_WINDOW )
+ if ( cmessage->data.l[0] == this->xa_WM_DELETE_WINDOW ) {
/* we got a window deletion message from out window manager.*/
LOGDBG("ClientMessage: WM_DELETE_WINDOW");
- return 0;
+ this->x.fe.send_event((frontend_t*)this, "QUIT");
+ }
+ break;
}
}
@@ -1633,7 +1640,7 @@ static int sxfe_run(frontend_t *this_gen)
xine_port_send_gui_data (this->x.video_port, XINE_GUI_SEND_COMPLETION_EVENT, &event);
}
- return 1;
+ return !this->x.fe.xine_is_finished((frontend_t*)this, 0);
}
static void sxfe_display_close(frontend_t *this_gen)