diff options
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -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 | ||
74 | static iApp app_; | 75 | static 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 | ||
371 | enum iColorTheme colorTheme_App(void) { | ||
372 | return app_.theme; | ||
373 | } | ||
374 | |||
367 | int run_App(int argc, char **argv) { | 375 | int 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 | ||
441 | static 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 | |||
433 | static iBool handlePrefsCommands_(iWidget *d, const char *cmd) { | 449 | static 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 | } |