summaryrefslogtreecommitdiffstats
path: root/abs/extra/xine-ui/xine-ui-xdg.diff
diff options
context:
space:
mode:
Diffstat (limited to 'abs/extra/xine-ui/xine-ui-xdg.diff')
-rw-r--r--abs/extra/xine-ui/xine-ui-xdg.diff206
1 files changed, 206 insertions, 0 deletions
diff --git a/abs/extra/xine-ui/xine-ui-xdg.diff b/abs/extra/xine-ui/xine-ui-xdg.diff
new file mode 100644
index 0000000..959d674
--- /dev/null
+++ b/abs/extra/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"),
+
+
+
+
+