summaryrefslogtreecommitdiff
path: root/src/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.c')
-rw-r--r--src/app.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/app.c b/src/app.c
index 5543db11..919a17fa 100644
--- a/src/app.c
+++ b/src/app.c
@@ -69,6 +69,7 @@ struct Impl_App {
69 iRect initialWindowRect; 69 iRect initialWindowRect;
70 float uiScale; 70 float uiScale;
71 int zoomPercent; 71 int zoomPercent;
72 enum iColorTheme theme;
72}; 73};
73 74
74static iApp app_; 75static iApp app_;
@@ -112,6 +113,7 @@ static iString *serializePrefs_App_(const iApp *d) {
112 appendFormat_String(str, "sidebar.mode arg:%d\n", mode_SidebarWidget(sidebar)); 113 appendFormat_String(str, "sidebar.mode arg:%d\n", mode_SidebarWidget(sidebar));
113 appendFormat_String(str, "uiscale arg:%f\n", uiScale_Window(d->window)); 114 appendFormat_String(str, "uiscale arg:%f\n", uiScale_Window(d->window));
114 appendFormat_String(str, "zoom.set arg:%d\n", d->zoomPercent); 115 appendFormat_String(str, "zoom.set arg:%d\n", d->zoomPercent);
116 appendFormat_String(str, "theme.set arg:%d\n", d->theme);
115 return str; 117 return str;
116} 118}
117 119
@@ -231,6 +233,7 @@ static void init_App_(iApp *d, int argc, char **argv) {
231 init_SortedArray(&d->tickers, sizeof(iTicker), cmp_Ticker_); 233 init_SortedArray(&d->tickers, sizeof(iTicker), cmp_Ticker_);
232 d->commandEcho = checkArgument_CommandLine(&d->args, "echo") != NULL; 234 d->commandEcho = checkArgument_CommandLine(&d->args, "echo") != NULL;
233 d->initialWindowRect = init_Rect(-1, -1, 800, 500); 235 d->initialWindowRect = init_Rect(-1, -1, 800, 500);
236 d->theme = dark_ColorTheme;
234 d->running = iFalse; 237 d->running = iFalse;
235 d->window = NULL; 238 d->window = NULL;
236 d->retainWindowSize = iTrue; 239 d->retainWindowSize = iTrue;
@@ -240,6 +243,7 @@ static void init_App_(iApp *d, int argc, char **argv) {
240 d->visited = new_Visited(); 243 d->visited = new_Visited();
241 d->bookmarks = new_Bookmarks(); 244 d->bookmarks = new_Bookmarks();
242 d->tabEnum = 0; /* generates unique IDs for tab pages */ 245 d->tabEnum = 0; /* generates unique IDs for tab pages */
246 setThemePalette_Color(d->theme);
243 loadPrefs_App_(d); 247 loadPrefs_App_(d);
244 load_Visited(d->visited, dataDir_App_); 248 load_Visited(d->visited, dataDir_App_);
245 load_Bookmarks(d->bookmarks, dataDir_App_); 249 load_Bookmarks(d->bookmarks, dataDir_App_);
@@ -364,6 +368,10 @@ int zoom_App(void) {
364 return app_.zoomPercent; 368 return app_.zoomPercent;
365} 369}
366 370
371enum iColorTheme colorTheme_App(void) {
372 return app_.theme;
373}
374
367int run_App(int argc, char **argv) { 375int run_App(int argc, char **argv) {
368 init_App_(&app_, argc, argv); 376 init_App_(&app_, argc, argv);
369 const int rc = run_App_(&app_); 377 const int rc = run_App_(&app_);
@@ -430,6 +438,14 @@ iBookmarks *bookmarks_App(void) {
430 return app_.bookmarks; 438 return app_.bookmarks;
431} 439}
432 440
441static void updatePrefsThemeButtons_(iWidget *d) {
442 for (size_t i = 0; i < max_ColorTheme; i++) {
443 setFlags_Widget(findChild_Widget(d, format_CStr("prefs.theme.%u", i)),
444 selected_WidgetFlag,
445 colorTheme_App() == i);
446 }
447}
448
433static iBool handlePrefsCommands_(iWidget *d, const char *cmd) { 449static iBool handlePrefsCommands_(iWidget *d, const char *cmd) {
434 if (equal_Command(cmd, "prefs.dismiss") || equal_Command(cmd, "preferences")) { 450 if (equal_Command(cmd, "prefs.dismiss") || equal_Command(cmd, "preferences")) {
435 setUiScale_Window(get_Window(), 451 setUiScale_Window(get_Window(),
@@ -439,6 +455,9 @@ static iBool handlePrefsCommands_(iWidget *d, const char *cmd) {
439 destroy_Widget(d); 455 destroy_Widget(d);
440 return iTrue; 456 return iTrue;
441 } 457 }
458 else if (equal_Command(cmd, "theme.changed")) {
459 updatePrefsThemeButtons_(d);
460 }
442 return iFalse; 461 return iFalse;
443} 462}
444 463
@@ -581,6 +600,7 @@ iBool handleCommand_App(const char *cmd) {
581 } 600 }
582 else if (equal_Command(cmd, "preferences")) { 601 else if (equal_Command(cmd, "preferences")) {
583 iWidget *dlg = makePreferences_Widget(); 602 iWidget *dlg = makePreferences_Widget();
603 updatePrefsThemeButtons_(dlg);
584 setToggle_Widget(findChild_Widget(dlg, "prefs.retainwindow"), d->retainWindowSize); 604 setToggle_Widget(findChild_Widget(dlg, "prefs.retainwindow"), d->retainWindowSize);
585 setText_InputWidget(findChild_Widget(dlg, "prefs.uiscale"), 605 setText_InputWidget(findChild_Widget(dlg, "prefs.uiscale"),
586 collectNewFormat_String("%g", uiScale_Window(d->window))); 606 collectNewFormat_String("%g", uiScale_Window(d->window)));
@@ -618,6 +638,12 @@ iBool handleCommand_App(const char *cmd) {
618 postCommand_App("bookmarks.changed"); 638 postCommand_App("bookmarks.changed");
619 return iTrue; 639 return iTrue;
620 } 640 }
641 else if (equal_Command(cmd, "theme.set")) {
642 d->theme = arg_Command(cmd);
643 setThemePalette_Color(d->theme);
644 postCommand_App("theme.changed");
645 return iTrue;
646 }
621 else { 647 else {
622 return iFalse; 648 return iFalse;
623 } 649 }