From a1922d0ec660fdc1892f2783515f781c090df0a9 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 20 Jan 2012 23:14:48 +0000 Subject: Fri Jan 20 23:14:48 UTC 2012 --- staging/xine-ui/xine-ui-xdg.diff | 206 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 staging/xine-ui/xine-ui-xdg.diff (limited to 'staging/xine-ui/xine-ui-xdg.diff') diff --git a/staging/xine-ui/xine-ui-xdg.diff b/staging/xine-ui/xine-ui-xdg.diff new file mode 100644 index 000000000..959d674b2 --- /dev/null +++ b/staging/xine-ui/xine-ui-xdg.diff @@ -0,0 +1,206 @@ +--- xine-ui-0.99.6.orig/src/xitk/common.h ++++ xine-ui-0.99.6/src/xitk/common.h +@@ -331,6 +331,5 @@ typedef struct { + int use_root_window; + + int ssaver_enabled; +- int ssaver_timeout; + + int skip_by_chapter; +--- xine-ui-0.99.6.orig/src/xitk/main.c ++++ xine-ui-0.99.6/src/xitk/main.c +@@ -1383,6 +1383,8 @@ int main(int argc, char *argv[]) { + if (sigprocmask (SIG_BLOCK, &vo_mask, NULL)) + fprintf (stderr, "sigprocmask() failed.\n"); + ++ signal(SIGCHLD, SIG_IGN); ++ + gGui = (gGui_t *) calloc(1, sizeof(gGui_t)); + + gGui->stream = NULL; +--- xine-ui-0.99.6.orig/src/xitk/panel.c ++++ xine-ui-0.99.6/src/xitk/panel.c +@@ -356,7 +356,6 @@ void panel_update_runtime_display(void) + * Update slider thread. + */ + static void *slider_loop(void *dummy) { +- int screensaver_timer = 0; + int status, speed; + int pos, secs; + int i = 0; +@@ -441,20 +440,7 @@ static void *slider_loop(void *dummy) { + else + video_window_set_mrl((char *)gGui->mmk.mrl); + +- if(!xitk_is_window_iconified(gGui->video_display, gGui->video_window)) { +- +- if(gGui->ssaver_timeout) { +- +- if(!(i % 2)) +- screensaver_timer++; +- +- if(screensaver_timer >= gGui->ssaver_timeout) { +- screensaver_timer = 0; +- video_window_reset_ssaver(); +- +- } +- } +- } ++ video_window_suspend_ssaver(!xitk_is_window_iconified(gGui->video_display, gGui->video_window)); + + if(gGui->logo_mode == 0) { + +@@ -494,6 +480,8 @@ static void *slider_loop(void *dummy) { + stream_infos_update_infos(); + + } ++ } else { ++ video_window_suspend_ssaver(0); + } + } + +--- xine-ui-0.99.6.orig/src/xitk/videowin.c ++++ xine-ui-0.99.6/src/xitk/videowin.c +@@ -1087,6 +1087,9 @@ static void video_window_adapt_size (voi + + /* The old window should be destroyed now */ + if(old_video_window != None) { ++ /* Screensaver control is tied to our window id */ ++ video_window_suspend_ssaver(0); ++ + XDestroyWindow(gGui->video_display, old_video_window); + + if(gGui->cursor_grabbed) +@@ -2261,69 +2264,34 @@ static void video_window_handle_event (X + + } + +-void video_window_reset_ssaver(void) { ++void video_window_suspend_ssaver(int do_suspend) { ++ static int was_suspended; + +- if(gGui->ssaver_enabled && (xitk_get_last_keypressed_time() >= (long int) gGui->ssaver_timeout)) { ++ do_suspend = do_suspend && gGui->ssaver_enabled; + +-#ifdef HAVE_XTESTEXTENSION +- if(gVw.have_xtest == True) { +- +- gVw.fake_key_cur++; +- +- if(gVw.fake_key_cur >= 2) +- gVw.fake_key_cur = 0; +- +- XLockDisplay(gGui->video_display); +- XTestFakeKeyEvent(gGui->video_display, gVw.fake_keys[gVw.fake_key_cur], True, CurrentTime); +- XTestFakeKeyEvent(gGui->video_display, gVw.fake_keys[gVw.fake_key_cur], False, CurrentTime); +- XSync(gGui->video_display, False); +- XUnlockDisplay(gGui->video_display); ++ if(was_suspended != do_suspend) { ++ if(fork() == 0) { ++ char window_id[30]; ++ char *args[] = { "xdg-screensaver", NULL, window_id, NULL }; ++ int fd; ++ ++ for(fd = 3; fd < 256; fd++) ++ close(fd); ++ ++ args[1] = do_suspend ? "suspend" : "resume"; ++ sprintf(window_id, "%lu", (unsigned long)gGui->video_window); ++ execvp(args[0], args); ++ _exit(0); + } +- else +-#endif +- { +- /* Reset the gnome screensaver. Look up the command in PATH only once to save time, */ +- /* assuming its location and permission will not change during run time of xine-ui. */ +- { +- static char *const gssaver_args[] = { "gnome-screensaver-command", "--poke", NULL }; +- static char *gssaver_path = NULL; +- +- if(!gssaver_path) { +- char *path = getenv("PATH"); +- +- if(!path) +- path = "/usr/local/bin:/usr/bin"; +- do { +- char *p, *pbuf; +- int plen; +- +- for(p = path; *path && *path != ':'; path++) +- ; +- if(p == path) +- plen = 1, p = "."; +- else +- plen = path - p; +- asprintf(&pbuf, "%.*s/%s", plen, p, gssaver_args[0]); +- if ( access(pbuf, X_OK) ) { +- free(pbuf); +- gssaver_path = ""; +- } else +- gssaver_path = pbuf; +- } while(!gssaver_path[0] && *path++); +- } +- if(gssaver_path[0] && (fork() == 0)) { +- execv(gssaver_path, gssaver_args); +- exit(0); +- } +- } + +- XLockDisplay(gGui->video_display); +- XResetScreenSaver(gGui->video_display); +- XUnlockDisplay(gGui->video_display); +- } ++ was_suspended = do_suspend; + } + } + ++void video_window_reset_ssaver(void) { ++ video_window_suspend_ssaver(1); ++} ++ + void video_window_get_frame_size(int *w, int *h) { + if(w) + *w = gVw.frame_width; +--- xine-ui-0.99.6.orig/src/xitk/videowin.h ++++ xine-ui-0.99.6/src/xitk/videowin.h +@@ -81,6 +81,7 @@ void video_window_get_mag (float *xmag, + void video_window_update_logo(void); + void video_window_change_skins(int); + ++void video_window_suspend_ssaver(int do_suspend); + void video_window_reset_ssaver(void); + + void video_window_get_frame_size(int *w, int *h); +--- xine-ui-0.99.6.orig/src/xitk/event.c ++++ xine-ui-0.99.6/src/xitk/event.c +@@ -135,9 +135,6 @@ static void skip_by_chapter_cb(void *dat + gGui->skip_by_chapter = cfg->num_value; + panel_update_nextprev_tips(); + } +-static void ssaver_timeout_cb(void *data, xine_cfg_entry_t *cfg) { +- gGui->ssaver_timeout = cfg->num_value; +-} + + static void visual_anim_cb(void *data, xine_cfg_entry_t *cfg) { + +@@ -1614,14 +1611,6 @@ void gui_init (int nfiles, char *filenam + snapshot_loc_cb, + CONFIG_NO_DATA); + +- gGui->ssaver_timeout = +- xine_config_register_num (__xineui_global_xine_instance, "gui.screensaver_timeout", 10, +- _("Screensaver reset interval (s)"), +- _("Time, in seconds, between two faked events to keep a screensaver quiet, 0 to disable."), +- CONFIG_LEVEL_ADV, +- ssaver_timeout_cb, +- CONFIG_NO_DATA); +- + gGui->skip_by_chapter = + xine_config_register_bool (__xineui_global_xine_instance, "gui.skip_by_chapter", 1, + _("Chapter hopping"), + + + + + -- cgit v1.2.3-54-g00ecf