mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Let vrious DPMS and screensaver timeout be written.
Corrected merging temporary file with our values with .xscreensaver one if exists, and if not, re-create .xscreensaver again
This commit is contained in:
parent
35005cb574
commit
e49a071634
@ -22,6 +22,7 @@
|
|||||||
EDELIB_NS_USING(String)
|
EDELIB_NS_USING(String)
|
||||||
EDELIB_NS_USING(file_path)
|
EDELIB_NS_USING(file_path)
|
||||||
EDELIB_NS_USING(file_remove)
|
EDELIB_NS_USING(file_remove)
|
||||||
|
EDELIB_NS_USING(file_rename)
|
||||||
EDELIB_NS_USING(run_program)
|
EDELIB_NS_USING(run_program)
|
||||||
EDELIB_NS_USING(dir_home)
|
EDELIB_NS_USING(dir_home)
|
||||||
EDELIB_NS_USING(dir_exists)
|
EDELIB_NS_USING(dir_exists)
|
||||||
@ -483,10 +484,27 @@ void xscreensaver_save_config(SaverPrefs *sp) {
|
|||||||
fprintf(fd, "# XScreenSaver Preferences File\n");
|
fprintf(fd, "# XScreenSaver Preferences File\n");
|
||||||
fprintf(fd, "# Written by ede-screensaver-conf\n\n");
|
fprintf(fd, "# Written by ede-screensaver-conf\n\n");
|
||||||
|
|
||||||
|
const char* val;
|
||||||
|
|
||||||
|
switch(sp->mode) {
|
||||||
|
case SAVER_OFF:
|
||||||
|
val = "off";
|
||||||
|
break;
|
||||||
|
case SAVER_BLANK:
|
||||||
|
val = "blank";
|
||||||
|
break;
|
||||||
|
case SAVER_RANDOM:
|
||||||
|
val = "random";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
val = "one";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fd, "mode: %s\n", val);
|
||||||
fprintf(fd, "selected: %i\n", sp->curr_hack);
|
fprintf(fd, "selected: %i\n", sp->curr_hack);
|
||||||
fprintf(fd, "timeout: 00:%i:00\n", sp->timeout);
|
fprintf(fd, "timeout: 00:%i:00\n", sp->timeout);
|
||||||
|
|
||||||
const char* val;
|
|
||||||
|
|
||||||
if(sp->dpms_enabled)
|
if(sp->dpms_enabled)
|
||||||
val = "yes";
|
val = "yes";
|
||||||
@ -504,22 +522,34 @@ void xscreensaver_save_config(SaverPrefs *sp) {
|
|||||||
fprintf(fd, "\t\t \"%s\" %s\t\t \\n\\\n", (*it)->name.c_str(), (*it)->exec.c_str());
|
fprintf(fd, "\t\t \"%s\" %s\t\t \\n\\\n", (*it)->name.c_str(), (*it)->exec.c_str());
|
||||||
|
|
||||||
fprintf(fd, "\n\n");
|
fprintf(fd, "\n\n");
|
||||||
|
|
||||||
|
/* some defaults */
|
||||||
|
fprintf(fd, "sgiSaverExtension: True\n");
|
||||||
|
fprintf(fd, "xidleExtension: True\n");
|
||||||
|
fprintf(fd, "procInterrupts: True\n");
|
||||||
|
fprintf(fd, "GetViewPortIsFullOfLies: False\n");
|
||||||
|
fprintf(fd, "demoCommand: xscreensaver-demo\n");
|
||||||
|
fprintf(fd, "prefsCommand: xscreensaver-demo -prefs\n");
|
||||||
|
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* now open it as Xresource database and merge with the real ~/.xscreensaver
|
* Now open it as Xresource database and merge with the real ~/.xscreensaver
|
||||||
* file, so other values we didn't wrote/used are preserved
|
* file, so other values we didn't wrote/used are preserved. If it does not
|
||||||
|
* exists, save it as ordinary file
|
||||||
*/
|
*/
|
||||||
XrmInitialize();
|
XrmInitialize();
|
||||||
XrmDatabase db = XrmGetFileDatabase(tmp_path.c_str());
|
|
||||||
|
XrmDatabase db = XrmGetFileDatabase(path.c_str());
|
||||||
if(db) {
|
if(db) {
|
||||||
XrmCombineFileDatabase(path.c_str(), &db, 1);
|
XrmCombineFileDatabase(tmp_path.c_str(), &db, True);
|
||||||
/* and store it as ~/.xscreensaver */
|
/* and store it as ~/.xscreensaver */
|
||||||
XrmPutFileDatabase(db, path.c_str());
|
XrmPutFileDatabase(db, path.c_str());
|
||||||
XrmDestroyDatabase(db);
|
XrmDestroyDatabase(db);
|
||||||
|
file_remove(tmp_path.c_str());
|
||||||
|
} else {
|
||||||
|
file_rename(tmp_path.c_str(), path.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
//file_remove(tmp_path.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* run screensaver in in FLTK window */
|
/* run screensaver in in FLTK window */
|
||||||
|
@ -20,6 +20,7 @@ static Fl_Pixmap image_energy(energy_star_xpm);
|
|||||||
static Fl_Spinner* standby_val;
|
static Fl_Spinner* standby_val;
|
||||||
static Fl_Spinner* suspend_val;
|
static Fl_Spinner* suspend_val;
|
||||||
static Fl_Spinner* off_val;
|
static Fl_Spinner* off_val;
|
||||||
|
static Fl_Spinner* timeout_val;
|
||||||
static Fl_Double_Window* main_win;
|
static Fl_Double_Window* main_win;
|
||||||
static Fl_Double_Window* preview_win;
|
static Fl_Double_Window* preview_win;
|
||||||
|
|
||||||
@ -60,6 +61,9 @@ static void choice_cb(Fl_Widget* w, void* s) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: for now only one is allowed */
|
||||||
|
sp->mode = SAVER_ONE;
|
||||||
|
|
||||||
/* find the name matches in our list and run it's command */
|
/* find the name matches in our list and run it's command */
|
||||||
HackListIter it = sp->hacks.begin(), it_end = sp->hacks.end();
|
HackListIter it = sp->hacks.begin(), it_end = sp->hacks.end();
|
||||||
for(; it != it_end; ++it) {
|
for(; it != it_end; ++it) {
|
||||||
@ -79,8 +83,14 @@ static void close_cb(Fl_Widget*, void*) {
|
|||||||
|
|
||||||
static void ok_cb(Fl_Widget*, void* s) {
|
static void ok_cb(Fl_Widget*, void* s) {
|
||||||
SaverPrefs* sp = (SaverPrefs*)s;
|
SaverPrefs* sp = (SaverPrefs*)s;
|
||||||
if(sp)
|
if(sp) {
|
||||||
|
sp->timeout = (int)timeout_val->value();
|
||||||
|
sp->dpms_standby = (int)standby_val->value();
|
||||||
|
sp->dpms_suspend = (int)suspend_val->value();
|
||||||
|
sp->dpms_off = (int)off_val->value();
|
||||||
|
|
||||||
xscreensaver_save_config(sp);
|
xscreensaver_save_config(sp);
|
||||||
|
}
|
||||||
close_cb(0, 0);
|
close_cb(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,37 +142,36 @@ int main(int argc, char **argv) {
|
|||||||
saver_list->add("(None)", 0, 0);
|
saver_list->add("(None)", 0, 0);
|
||||||
|
|
||||||
if(sp) {
|
if(sp) {
|
||||||
saver_list->callback((Fl_Callback*)choice_cb, sp);
|
|
||||||
|
|
||||||
/* 1 is first item, 0 is '(None)' */
|
|
||||||
int sel = 0;
|
int sel = 0;
|
||||||
|
saver_list->callback((Fl_Callback*)choice_cb, sp);
|
||||||
|
|
||||||
/* fix possible error */
|
/* fix possible error */
|
||||||
if(sp->curr_hack >= sp->hacks.size())
|
if(sp->curr_hack >= sp->hacks.size())
|
||||||
sp->curr_hack = 1;
|
sp->curr_hack = 0;
|
||||||
|
|
||||||
HackListIter it = sp->hacks.begin(), it_end = sp->hacks.end();
|
HackListIter it = sp->hacks.begin(), it_end = sp->hacks.end();
|
||||||
for(int i = 0; it != it_end; ++it, i++) {
|
for(int i = 1; it != it_end; ++it, i++) {
|
||||||
saver_list->add((*it)->name.c_str(), 0, 0);
|
saver_list->add((*it)->name.c_str(), 0, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check real hack index number against current one
|
* Check real hack index number against current one and let it match
|
||||||
* and let it match position in our Fl_Choice list
|
* position in our Fl_Choice list. Note that first item is '(None)'
|
||||||
|
* so 'i' starts from 1
|
||||||
*/
|
*/
|
||||||
if(sp->mode != SAVER_OFF && sel == 0 && (*it)->sindex == sp->curr_hack)
|
if(sp->mode != SAVER_OFF && (*it)->sindex == sp->curr_hack)
|
||||||
sel = i;
|
sel = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
saver_list->value(sel);
|
saver_list->value(sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Fl_Spinner* timeout = new Fl_Spinner(275, 226, 45, 25, _("Timeout:"));
|
timeout_val = new Fl_Spinner(275, 226, 45, 25, _("Timeout:"));
|
||||||
timeout->tooltip(_("Idle time in minutes after screensaver is started"));
|
timeout_val->tooltip(_("Idle time in minutes after screensaver is started"));
|
||||||
timeout->range(1, 500);
|
timeout_val->range(1, 500);
|
||||||
if(sp)
|
if(sp)
|
||||||
timeout->value(sp->timeout);
|
timeout_val->value(sp->timeout);
|
||||||
else
|
else
|
||||||
timeout->value(1);
|
timeout_val->value(1);
|
||||||
|
|
||||||
g1->end();
|
g1->end();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user