From 8818561ac303f50166f5598f4d32097446795c97 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 18 Sep 2012 18:29:01 +0000 Subject: [PATCH 01/16] Properly reload the demo plug-in when changed at run-time --- src/locker.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/locker.c b/src/locker.c index 1596884..42b03e2 100644 --- a/src/locker.c +++ b/src/locker.c @@ -1328,6 +1328,9 @@ static int _locker_demo_config_set(Locker * locker, char const * section, /* locker_demo_load */ static int _locker_demo_load(Locker * locker, char const * demo) { + size_t i; + GdkWindow * window; + _locker_demo_unload(locker); if(demo == NULL && (demo = config_get(locker->config, NULL, "demo")) == NULL) @@ -1336,9 +1339,8 @@ static int _locker_demo_load(Locker * locker, char const * demo) == NULL) return -1; if((locker->ddefinition = plugin_lookup(locker->dplugin, "plugin")) - == NULL) - return -1; - if(locker->ddefinition->init == NULL + == NULL + || locker->ddefinition->init == NULL || locker->ddefinition->destroy == NULL || (locker->demo = locker->ddefinition->init( &locker->dhelper)) == NULL) @@ -1348,6 +1350,16 @@ static int _locker_demo_load(Locker * locker, char const * demo) locker->dplugin = NULL; return -1; } + /* register the existing windows */ + for(i = 0; i < locker->windows_cnt; i++) + { +#if GTK_CHECK_VERSION(2, 14, 0) + window = gtk_widget_get_window(locker->windows[i]); +#else + window = locker->windows[i]->window; +#endif + locker->ddefinition->add(locker->demo, window); + } return 0; } -- 2.20.1 From 375efa50d98214a282de6ac52934992a829e98d7 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 21 Sep 2012 22:35:55 +0000 Subject: [PATCH 02/16] Fixed double-free() and potential crash upon startup --- src/locker.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/locker.c b/src/locker.c index 42b03e2..6e2f03b 100644 --- a/src/locker.c +++ b/src/locker.c @@ -213,7 +213,8 @@ Locker * locker_new(char const * demo, char const * auth) locker->screen = gdk_x11_get_default_screen(); if((cnt = gdk_screen_get_n_monitors(screen)) < 1) cnt = 1; - locker->windows = malloc(sizeof(*locker->windows) * cnt); + if((locker->windows = malloc(sizeof(*locker->windows) * cnt)) != NULL) + locker->windows[0] = NULL; locker->windows_cnt = cnt; locker->aplugin = NULL; locker->adefinition = NULL; @@ -226,7 +227,8 @@ Locker * locker_new(char const * demo, char const * auth) locker->pr_window = NULL; locker->ab_window = NULL; /* check for errors */ - if(_new_config(locker) != 0 + if(locker->windows == NULL + || _new_config(locker) != 0 || _locker_demo_load(locker, demo) != 0 || (widget = _locker_auth_load(locker, auth)) == NULL || _new_xss(locker, cnt) != 0) @@ -373,7 +375,6 @@ void locker_delete(Locker * locker) free(locker->windows); if(locker->ab_window != NULL) gtk_widget_destroy(locker->ab_window); - free(locker->windows); XScreenSaverUnregister(GDK_DISPLAY_XDISPLAY(locker->display), locker->screen); if(locker->config != NULL) -- 2.20.1 From 8a642fe73676ab3edc33bd583f20ace820bbdcda Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 21 Sep 2012 23:04:45 +0000 Subject: [PATCH 03/16] More proper initialization --- src/locker.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/locker.c b/src/locker.c index 6e2f03b..a83c353 100644 --- a/src/locker.c +++ b/src/locker.c @@ -214,7 +214,8 @@ Locker * locker_new(char const * demo, char const * auth) if((cnt = gdk_screen_get_n_monitors(screen)) < 1) cnt = 1; if((locker->windows = malloc(sizeof(*locker->windows) * cnt)) != NULL) - locker->windows[0] = NULL; + for(i = 0; i < cnt; i++) + locker->windows[i] = NULL; locker->windows_cnt = cnt; locker->aplugin = NULL; locker->adefinition = NULL; -- 2.20.1 From ed735733b230bc875aa537fdbdf6e4386d0b9cb2 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 21 Sep 2012 23:09:59 +0000 Subject: [PATCH 04/16] More error checking --- src/locker.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/locker.c b/src/locker.c index a83c353..900d39c 100644 --- a/src/locker.c +++ b/src/locker.c @@ -1081,9 +1081,10 @@ static int _locker_action_stop(Locker * locker) if(locker->ddefinition != NULL && locker->ddefinition->stop != NULL) locker->ddefinition->stop(locker->demo); #if GTK_CHECK_VERSION(2, 14, 0) - if(locker->windows[0] != NULL) + if(locker->windows[0] != NULL + && (window = gtk_widget_get_window(locker->windows[0])) + != NULL) { - window = gtk_widget_get_window(locker->windows[0]); gdk_window_clear(window); gdk_window_invalidate_rect(window, NULL, TRUE); } -- 2.20.1 From f0ccfed88be3e5ce6a121ae9692a29e047490d6d Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 21 Sep 2012 23:12:34 +0000 Subject: [PATCH 05/16] Fixed build with Gtk+ 3.0 --- src/locker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locker.c b/src/locker.c index 900d39c..eec8e07 100644 --- a/src/locker.c +++ b/src/locker.c @@ -265,7 +265,7 @@ Locker * locker_new(char const * demo, char const * auth) gtk_container_add(GTK_CONTAINER(locker->windows[0]), widget); root = gdk_get_default_root_window(); XScreenSaverSelectInput(GDK_DISPLAY_XDISPLAY(locker->display), - GDK_WINDOW_XWINDOW(root), ScreenSaverNotifyMask); + GDK_WINDOW_XID(root), ScreenSaverNotifyMask); gdk_x11_register_standard_event_type(locker->display, locker->event, 1); gdk_window_add_filter(root, _locker_on_filter, locker); desktop_message_register(LOCKER_CLIENT_MESSAGE, _locker_on_message, -- 2.20.1 From e5d18f6f46770d19567e6c000be0910ec027891a Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 21 Sep 2012 23:16:17 +0000 Subject: [PATCH 06/16] Do not add windows to the demos before they are realized --- src/locker.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/locker.c b/src/locker.c index eec8e07..3b446cf 100644 --- a/src/locker.c +++ b/src/locker.c @@ -1356,12 +1356,15 @@ static int _locker_demo_load(Locker * locker, char const * demo) /* register the existing windows */ for(i = 0; i < locker->windows_cnt; i++) { + if(locker->windows[i] == NULL) + continue; #if GTK_CHECK_VERSION(2, 14, 0) window = gtk_widget_get_window(locker->windows[i]); #else window = locker->windows[i]->window; #endif - locker->ddefinition->add(locker->demo, window); + if(window != NULL) + locker->ddefinition->add(locker->demo, window); } return 0; } -- 2.20.1 From 46880ed41c5e0c46f41cf8bbbe4d5ed17ed6af96 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 22 Sep 2012 01:21:51 +0000 Subject: [PATCH 07/16] Help compile with Gtk+ 3.0 --- src/demos/xscreensaver.c | 4 ++-- src/demos/xterm.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/demos/xscreensaver.c b/src/demos/xscreensaver.c index 014b876..b25b94a 100644 --- a/src/demos/xscreensaver.c +++ b/src/demos/xscreensaver.c @@ -116,7 +116,7 @@ static int _xscreensaver_add(XScreensaver * xscreensaver, GdkWindow * window) int ret = 0; LockerDemoHelper * helper = xscreensaver->helper; XScreensaverWindow * w; - unsigned int id = GDK_WINDOW_XWINDOW(window); + unsigned long id = GDK_WINDOW_XID(window); GError * error = NULL; char * argv[] = { NULL, "-window-id", NULL, NULL }; char const * p; @@ -132,7 +132,7 @@ static int _xscreensaver_add(XScreensaver * xscreensaver, GdkWindow * window) argv[0] = strdup(p); else argv[0] = strdup(PREFIX "/libexec/xscreensaver/bsod"); - snprintf(buf, sizeof(buf), "%u", id); + snprintf(buf, sizeof(buf), "%lu", id); argv[2] = buf; if(argv[0] == NULL) return -helper->error(NULL, strerror(errno), 1); diff --git a/src/demos/xterm.c b/src/demos/xterm.c index 34c2e1e..3a23dcb 100644 --- a/src/demos/xterm.c +++ b/src/demos/xterm.c @@ -115,7 +115,7 @@ static int _xterm_add(XTerm * xterm, GdkWindow * window) int ret = 0; LockerDemoHelper * helper = xterm->helper; XTermWindow * w; - unsigned int id = GDK_WINDOW_XWINDOW(window); + unsigned long id = GDK_WINDOW_XID(window); GError * error = NULL; char * argv[] = { NULL, "-into", NULL, "-e", NULL, NULL }; char const * p; @@ -134,7 +134,7 @@ static int _xterm_add(XTerm * xterm, GdkWindow * window) argv[4] = strdup(p); else argv[4] = strdup("top"); - snprintf(buf, sizeof(buf), "%u", id); + snprintf(buf, sizeof(buf), "%lu", id); argv[2] = buf; if(argv[0] == NULL || argv[4] == NULL) { -- 2.20.1 From 940e4f9f9288c53d44d49c78bf0d785450368373 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 26 Sep 2012 14:57:04 +0000 Subject: [PATCH 08/16] Minor performance improvement --- src/locker.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/locker.c b/src/locker.c index 3b446cf..01e3d77 100644 --- a/src/locker.c +++ b/src/locker.c @@ -719,8 +719,13 @@ static void _cancel_demo(Locker * locker, GtkListStore * store) theme = gtk_icon_theme_get_default(); gtk_list_store_clear(store); +#if GTK_CHECK_VERSION(2, 6, 0) + gtk_list_store_insert_with_values(store, &iter, -1, +#else gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, LPC_FILENAME, NULL, + gtk_list_store_set(store, &iter, +#endif + LPC_FILENAME, NULL, LPC_NAME, _("Disabled"), -1); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(locker->pr_dcombo), &iter); if((dir = opendir(LIBDIR "/" PACKAGE "/demos")) == NULL) @@ -744,9 +749,14 @@ static void _cancel_demo(Locker * locker, GtkListStore * store) plugin_delete(p); continue; } +#if GTK_CHECK_VERSION(2, 6, 0) + gtk_list_store_insert_with_values(store, &iter, -1, +#else gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, LPC_FILENAME, de->d_name, - LPC_NAME, ldd->name, -1); + gtk_list_store_set(store, &iter, +#endif + LPC_FILENAME, de->d_name, LPC_NAME, ldd->name, + -1); /* select if currently active */ if(locker->ddefinition != NULL /* XXX check on de->d_name instead */ -- 2.20.1 From adba2babd6aa93deef2d4a90b8ab38414daa60f4 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 26 Sep 2012 15:18:51 +0000 Subject: [PATCH 09/16] No longer hardcoding the size of icons --- src/locker.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/locker.c b/src/locker.c index 01e3d77..83d0bce 100644 --- a/src/locker.c +++ b/src/locker.c @@ -658,8 +658,10 @@ static void _cancel_auth(Locker * locker, GtkListStore * store) char const ext[] = ".so"; Plugin * p; LockerAuthDefinition * lad; + gint size = 24; theme = gtk_icon_theme_get_default(); + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &size, &size); gtk_list_store_clear(store); if((dir = opendir(LIBDIR "/" PACKAGE "/auth")) == NULL) return; @@ -694,11 +696,11 @@ static void _cancel_auth(Locker * locker, GtkListStore * store) locker->pr_acombo), &iter); icon = NULL; if(lad->icon != NULL) - icon = gtk_icon_theme_load_icon(theme, lad->icon, 24, 0, - NULL); + icon = gtk_icon_theme_load_icon(theme, lad->icon, size, + 0, NULL); if(icon == NULL) icon = gtk_icon_theme_load_icon(theme, "gnome-settings", - 24, 0, NULL); + size, 0, NULL); gtk_list_store_set(store, &iter, LPC_ICON, icon, -1); plugin_delete(p); } @@ -716,17 +718,21 @@ static void _cancel_demo(Locker * locker, GtkListStore * store) char const ext[] = ".so"; Plugin * p; LockerDemoDefinition * ldd; + gint size = 24; theme = gtk_icon_theme_get_default(); + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &size, &size); gtk_list_store_clear(store); + /* "Disabled", selected by default */ + icon = gtk_icon_theme_load_icon(theme, "gtk-cancel", size, 0, NULL); #if GTK_CHECK_VERSION(2, 6, 0) gtk_list_store_insert_with_values(store, &iter, -1, #else gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, #endif - LPC_FILENAME, NULL, - LPC_NAME, _("Disabled"), -1); + LPC_FILENAME, NULL, LPC_NAME, _("Disabled"), + LPC_ICON, icon, -1); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(locker->pr_dcombo), &iter); if((dir = opendir(LIBDIR "/" PACKAGE "/demos")) == NULL) return; @@ -766,12 +772,13 @@ static void _cancel_demo(Locker * locker, GtkListStore * store) locker->pr_dcombo), &iter); icon = NULL; if(ldd->icon != NULL) - icon = gtk_icon_theme_load_icon(theme, ldd->icon, 24, 0, - NULL); + icon = gtk_icon_theme_load_icon(theme, ldd->icon, size, + 0, NULL); if(icon == NULL) icon = gtk_icon_theme_load_icon(theme, "gnome-settings", - 24, 0, NULL); - gtk_list_store_set(store, &iter, LPC_ICON, icon, -1); + size, 0, NULL); + if(icon != NULL) + gtk_list_store_set(store, &iter, LPC_ICON, icon, -1); plugin_delete(p); } closedir(dir); -- 2.20.1 From c5374a4da0ab4b0f12ea84c7351d8218eb5527cb Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 26 Sep 2012 15:29:40 +0000 Subject: [PATCH 10/16] Set a couple demo icons --- src/demos/logo.c | 2 +- src/demos/xscreensaver.c | 2 +- src/demos/xterm.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/demos/logo.c b/src/demos/logo.c index f013188..b30902e 100644 --- a/src/demos/logo.c +++ b/src/demos/logo.c @@ -85,7 +85,7 @@ static gboolean _logo_on_timeout(gpointer data); LockerDemoDefinition plugin = { "Logo", - NULL, + "start-here", NULL, _logo_init, _logo_destroy, diff --git a/src/demos/xscreensaver.c b/src/demos/xscreensaver.c index b25b94a..0da58d4 100644 --- a/src/demos/xscreensaver.c +++ b/src/demos/xscreensaver.c @@ -66,7 +66,7 @@ static void _xscreensaver_stop(XScreensaver * xscreensaver); LockerDemoDefinition plugin = { "XScreensaver", - NULL, + "xscreensaver", NULL, _xscreensaver_init, _xscreensaver_destroy, diff --git a/src/demos/xterm.c b/src/demos/xterm.c index 3a23dcb..d35208d 100644 --- a/src/demos/xterm.c +++ b/src/demos/xterm.c @@ -65,7 +65,7 @@ static void _xterm_stop(XTerm * xterm); LockerDemoDefinition plugin = { "XTerm", - NULL, + "terminal", NULL, _xterm_init, _xterm_destroy, -- 2.20.1 From b657b94aec736fd2a6d6335d7646f488b790403d Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 26 Sep 2012 15:38:55 +0000 Subject: [PATCH 11/16] Minor performance improvement --- src/locker.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/locker.c b/src/locker.c index 83d0bce..43e73c2 100644 --- a/src/locker.c +++ b/src/locker.c @@ -684,9 +684,14 @@ static void _cancel_auth(Locker * locker, GtkListStore * store) plugin_delete(p); continue; } +#if GTK_CHECK_VERSION(2, 6, 0) + gtk_list_store_insert_with_values(store, &iter, -1, +#else gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, LPC_FILENAME, de->d_name, - LPC_NAME, lad->name, -1); + gtk_list_store_set(store, &iter, +#endif + LPC_FILENAME, de->d_name, LPC_NAME, lad->name, + -1); /* select if currently active */ if(locker->adefinition != NULL /* XXX check on de->d_name instead */ @@ -831,10 +836,14 @@ static void _cancel_plugins(Locker * locker, GtkListStore * store) if(icon == NULL) icon = gtk_icon_theme_load_icon(theme, "gnome-settings", 24, 0, NULL); +#if GTK_CHECK_VERSION(2, 6, 0) + gtk_list_store_insert_with_values(store, &iter, -1, +#else gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, LPC_FILENAME, de->d_name, - LPC_NAME, lpd->name, LPC_ENABLED, enabled, - LPC_ICON, icon, -1); + gtk_list_store_set(store, &iter, +#endif + LPC_FILENAME, de->d_name, LPC_NAME, lpd->name, + LPC_ENABLED, enabled, LPC_ICON, icon, -1); plugin_delete(p); } closedir(dir); -- 2.20.1 From e706b673f0a686766ba2f20fb598ca55aa87d157 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 12 Oct 2012 23:13:23 +0000 Subject: [PATCH 12/16] Preliminary implementation for resolution and monitor changes --- src/locker.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/locker.c b/src/locker.c index 43e73c2..21cbb52 100644 --- a/src/locker.c +++ b/src/locker.c @@ -1575,6 +1575,7 @@ static gboolean _lock_on_closex(void) /* locker_on_filter */ +static GdkFilterReturn _filter_configure(Locker * locker); static GdkFilterReturn _filter_xscreensaver_notify(Locker * locker, XScreenSaverNotifyEvent * xssne); @@ -1590,10 +1591,86 @@ static GdkFilterReturn _locker_on_filter(GdkXEvent * xevent, GdkEvent * event, #endif if(xev->type == locker->event) return _filter_xscreensaver_notify(locker, xevent); + else if(xev->type == ConfigureNotify) + return _filter_configure(locker); else return GDK_FILTER_CONTINUE; } +static GdkFilterReturn _filter_configure(Locker * locker) +{ + GdkScreen * screen; + size_t cnt; + size_t i; + GdkRectangle rect; + GdkWindow * window; + GtkWidget ** p; + GdkColor black; + +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s()\n", __func__); +#endif + screen = gdk_screen_get_default(); + if((cnt = gdk_screen_get_n_monitors(screen)) < 1) + cnt = 1; + for(i = 0; i < locker->windows_cnt && i < cnt; i++) + { + if(locker->windows[i] == NULL) + /* FIXME implement this case too */ + continue; + gdk_screen_get_monitor_geometry(screen, i, &rect); + gtk_window_move(GTK_WINDOW(locker->windows[i]), rect.x, rect.y); + gtk_window_resize(GTK_WINDOW(locker->windows[i]), rect.width, + rect.height); + } + if(i == cnt) + /* remove windows */ + for(; i < locker->windows_cnt; i++) + { + if(locker->windows[i] == NULL) + continue; +#if GTK_CHECK_VERSION(2, 14, 0) + window = gtk_widget_get_window(locker->windows[i]); +#else + window = locker->windows[i]->window; +#endif + locker->ddefinition->remove(locker->demo, window); + gtk_widget_destroy(locker->windows[i]); + locker->windows[i] = NULL; + } + else if(i == locker->windows_cnt) + { + memset(&black, 0, sizeof(black)); + /* add windows */ + if((p = realloc(locker->windows, sizeof(*p) * cnt)) == NULL) + /* XXX report the error */ + return GDK_FILTER_CONTINUE; + locker->windows = p; + for(; i < cnt; i++) + { + /* FIXME code duplication */ + locker->windows[i] = gtk_window_new( + GTK_WINDOW_TOPLEVEL); + gdk_screen_get_monitor_geometry(screen, i, &rect); + gtk_window_move(GTK_WINDOW(locker->windows[i]), rect.x, + rect.y); + gtk_window_resize(GTK_WINDOW(locker->windows[i]), + rect.width, rect.height); + gtk_window_set_keep_above(GTK_WINDOW( + locker->windows[i]), TRUE); + gtk_window_stick(GTK_WINDOW(locker->windows[i])); + gtk_widget_modify_bg(locker->windows[i], + GTK_STATE_NORMAL, &black); + g_signal_connect_swapped(G_OBJECT(locker->windows[i]), + "delete-event", + G_CALLBACK(_lock_on_closex), NULL); + g_signal_connect(locker->windows[i], "realize", + G_CALLBACK(_locker_on_realize), locker); + } + } + return GDK_FILTER_CONTINUE; +} + static GdkFilterReturn _filter_xscreensaver_notify(Locker * locker, XScreenSaverNotifyEvent * xssne) { -- 2.20.1 From 6abbc74c5686d13247f9cb3e03679ce8cf9c2d6a Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 12 Oct 2012 23:18:24 +0000 Subject: [PATCH 13/16] Code cleanup --- src/locker.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/locker.c b/src/locker.c index 21cbb52..cc036d2 100644 --- a/src/locker.c +++ b/src/locker.c @@ -187,7 +187,7 @@ static void _locker_on_realize(GtkWidget * widget, gpointer data); static int _new_config(Locker * locker); static void _new_helpers(Locker * locker); static int _new_plugins(Locker * locker); -static int _new_xss(Locker * locker, size_t cnt); +static int _new_xss(Locker * locker); Locker * locker_new(char const * demo, char const * auth) { @@ -232,7 +232,7 @@ Locker * locker_new(char const * demo, char const * auth) || _new_config(locker) != 0 || _locker_demo_load(locker, demo) != 0 || (widget = _locker_auth_load(locker, auth)) == NULL - || _new_xss(locker, cnt) != 0) + || _new_xss(locker) != 0) { _locker_error(NULL, error_get(), 1); locker_delete(locker); @@ -334,7 +334,7 @@ static int _new_plugins(Locker * locker) return ret; } -static int _new_xss(Locker * locker, size_t cnt) +static int _new_xss(Locker * locker) { int error; @@ -1291,13 +1291,12 @@ static int _locker_config_load(Locker * locker) if((homedir = getenv("HOME")) == NULL) homedir = g_get_home_dir(); - if((filename = malloc(strlen(homedir) + sizeof(LOCKER_CONFIG_FILE) + 1)) - == NULL) + if((filename = string_new_append(homedir, "/", LOCKER_CONFIG_FILE, + NULL)) == NULL) return -1; - sprintf(filename, "%s/%s", homedir, LOCKER_CONFIG_FILE); if((ret = config_load(locker->config, filename)) != 0) _locker_error(NULL, error_get(), ret); - free(filename); + string_delete(filename); return ret; } -- 2.20.1 From f1764ab23e808d30cc9fb6b9e78ba3ac93dba34a Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 13 Oct 2012 02:59:31 +0000 Subject: [PATCH 14/16] Allow differing scrolling speeds and direction --- src/demos/logo.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/demos/logo.c b/src/demos/logo.c index b30902e..9391472 100644 --- a/src/demos/logo.c +++ b/src/demos/logo.c @@ -221,9 +221,8 @@ static void _logo_start(Logo * logo) /* settings */ /* scrolling */ logo->scroll = 0; - if((p = helper->config_get(helper->locker, "logo", "scroll")) != NULL - && strtol(p, NULL, 10) == 1) - logo->scroll = 1; + if((p = helper->config_get(helper->locker, "logo", "scroll")) != NULL) + logo->scroll = strtol(p, NULL, 10); /* opacity */ logo->opacity = 255; if((p = helper->config_get(helper->locker, "logo", "opacity")) != NULL) @@ -255,7 +254,7 @@ static gboolean _logo_on_idle(gpointer data) { Logo * logo = data; - logo->source = g_timeout_add(logo->scroll ? 40 : 10000, + logo->source = g_timeout_add((logo->scroll != 0) ? 40 : 10000, _logo_on_timeout, logo); return FALSE; } @@ -271,7 +270,7 @@ static gboolean _logo_on_timeout(gpointer data) for(i = 0; i < logo->windows_cnt; i++) _timeout_window(logo, &logo->windows[i]); - logo->frame_num++; + logo->frame_num += logo->scroll; logo->source = g_idle_add(_logo_on_idle, logo); return FALSE; } @@ -323,7 +322,7 @@ static void _timeout_window(Logo * logo, LogoWindow * window) { width = gdk_pixbuf_get_width(logo->background); height = gdk_pixbuf_get_height(logo->background); - if(logo->scroll && width > 0 && height > 0) + if((logo->scroll != 0) && width > 0 && height > 0) { offset_x = logo->frame_num % width; offset_y = logo->frame_num % height; -- 2.20.1 From 57309a0f11c65c7d9da0a671d5c86ba28caac169 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 14 Oct 2012 16:36:39 +0000 Subject: [PATCH 15/16] Updated French translations --- po/fr.po | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/po/fr.po b/po/fr.po index 2243d90..dad56ae 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Locker 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-16 03:10+0200\n" +"POT-Creation-Date: 2012-10-14 18:20+0200\n" "PO-Revision-Date: 2011-10-17 16:32+0200\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: French\n" @@ -15,51 +15,51 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../src/locker.c:345 +#: ../src/locker.c:348 msgid "Could not register as screensaver" msgstr "Impossible de déclarer l'économiseur d'écran" -#: ../src/locker.c:425 +#: ../src/locker.c:427 msgid "Screensaver preferences" msgstr "Préférences de l'économiseur d'écran" -#: ../src/locker.c:441 +#: ../src/locker.c:443 msgid "Authentication" msgstr "Authentification" -#: ../src/locker.c:445 +#: ../src/locker.c:447 msgid "Demos" msgstr "Démos" -#: ../src/locker.c:449 +#: ../src/locker.c:451 msgid "Plug-ins" msgstr "Greffons" -#: ../src/locker.c:470 ../src/locker.c:501 +#: ../src/locker.c:472 ../src/locker.c:503 msgid "Plug-in: " msgstr "Greffon : " -#: ../src/locker.c:550 +#: ../src/locker.c:552 msgid "Enabled" msgstr "Activé" -#: ../src/locker.c:560 +#: ../src/locker.c:562 msgid "Name" msgstr "Nom" -#: ../src/locker.c:722 +#: ../src/locker.c:739 msgid "Disabled" msgstr "Désactivé" -#: ../src/locker.c:907 +#: ../src/locker.c:935 msgid "Screensaver for the DeforaOS desktop" msgstr "Économiseur d'écran pour l'environnement DeforaOS" -#: ../src/locker.c:912 +#: ../src/locker.c:940 msgid "translator-credits" msgstr "Pierre Pronchery " -#: ../src/locker.c:1395 ../src/locker.c:1399 +#: ../src/locker.c:1438 ../src/locker.c:1442 msgid "Error" msgstr "Erreur" -- 2.20.1 From 309ad65b3c2c619523889f363396789cb0740473 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 14 Oct 2012 16:58:09 +0000 Subject: [PATCH 16/16] Releasing DeforaOS Locker 0.2.1 --- Makefile | 2 +- config.h | 2 +- config.sh | 2 +- project.conf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 23c4d4e..23e21d7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ PACKAGE = Locker -VERSION = 0.2.0 +VERSION = 0.2.1 SUBDIRS = data doc include po src tools RM ?= rm -f LN ?= ln -f diff --git a/config.h b/config.h index a48d797..df1f0e2 100644 --- a/config.h +++ b/config.h @@ -1,5 +1,5 @@ #define PACKAGE "Locker" -#define VERSION "0.2.0" +#define VERSION "0.2.1" #ifndef PREFIX # define PREFIX "/usr/local" diff --git a/config.sh b/config.sh index 7afc1ed..eeb06c9 100644 --- a/config.sh +++ b/config.sh @@ -1,5 +1,5 @@ PACKAGE="Locker" -VERSION="0.2.0" +VERSION="0.2.1" PREFIX="/usr/local" LIBDIR="${PREFIX}/lib" diff --git a/project.conf b/project.conf index c75df21..3887596 100644 --- a/project.conf +++ b/project.conf @@ -1,5 +1,5 @@ package=Locker -version=0.2.0 +version=0.2.1 config=h,sh subdirs=data,doc,include,po,src,tools -- 2.20.1