summaryrefslogtreecommitdiff
path: root/src/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.c')
-rw-r--r--src/app.c66
1 files changed, 51 insertions, 15 deletions
diff --git a/src/app.c b/src/app.c
index 30221582..2b1ca1b6 100644
--- a/src/app.c
+++ b/src/app.c
@@ -1362,6 +1362,10 @@ void processEvents_App(enum iAppEventMode eventMode) {
1362 dispatchCommands_Periodic(&d->periodic); 1362 dispatchCommands_Periodic(&d->periodic);
1363 continue; 1363 continue;
1364 } 1364 }
1365 if (ev.type == SDL_USEREVENT && ev.user.code == releaseObject_UserEventCode) {
1366 iRelease(ev.user.data1);
1367 continue;
1368 }
1365#if defined (LAGRANGE_ENABLE_IDLE_SLEEP) 1369#if defined (LAGRANGE_ENABLE_IDLE_SLEEP)
1366 if (ev.type == SDL_USEREVENT && ev.user.code == asleep_UserEventCode) { 1370 if (ev.type == SDL_USEREVENT && ev.user.code == asleep_UserEventCode) {
1367 if (SDL_GetTicks() - d->lastEventTime > idleThreshold_App_ && 1371 if (SDL_GetTicks() - d->lastEventTime > idleThreshold_App_ &&
@@ -2245,6 +2249,13 @@ void resetFonts_App(void) {
2245 } 2249 }
2246} 2250}
2247 2251
2252void availableFontsChanged_App(void) {
2253 iApp *d = &app_;
2254 iConstForEach(PtrArray, win, listWindows_App_(d, collectNew_PtrArray())) {
2255 resetMissing_Text(text_Window(win.ptr));
2256 }
2257}
2258
2248static void invalidateCachedDocuments_App_(void) { 2259static void invalidateCachedDocuments_App_(void) {
2249 iForEach(ObjectList, i, iClob(listDocuments_App(NULL))) { 2260 iForEach(ObjectList, i, iClob(listDocuments_App(NULL))) {
2250 invalidateCachedLayout_History(history_DocumentWidget(i.object)); 2261 invalidateCachedLayout_History(history_DocumentWidget(i.object));
@@ -2371,24 +2382,49 @@ iBool handleCommand_App(const char *cmd) {
2371 reload_Fonts(); /* also does font cache reset, window invalidation */ 2382 reload_Fonts(); /* also does font cache reset, window invalidation */
2372 return iTrue; 2383 return iTrue;
2373 } 2384 }
2374#if 0 2385 else if (equal_Command(cmd, "font.find")) {
2375 else if (equal_Command(cmd, "font.user")) { 2386 searchOnlineLibraryForCharacters_Fonts(string_Command(cmd, "chars"));
2376 const char *path = suffixPtr_Command(cmd, "path"); 2387 return iTrue;
2377 if (cmp_String(&d->prefs.symbolFontPath, path)) { 2388 }
2378 if (!isFrozen) { 2389 else if (equal_Command(cmd, "font.found")) {
2379 setFreezeDraw_MainWindow(get_MainWindow(), iTrue); 2390 if (hasLabel_Command(cmd, "error")) {
2380 } 2391 makeSimpleMessage_Widget("${heading.glyphfinder}",
2381 setCStr_String(&d->prefs.symbolFontPath, path); 2392 format_CStr("%d %s",
2382 loadUserFonts_Text(); 2393 argLabel_Command(cmd, "error"),
2383 resetFonts_App(d); 2394 suffixPtr_Command(cmd, "msg")));
2384 if (!isFrozen) { 2395 return iTrue;
2385 postCommand_App("font.changed");
2386 postCommand_App("window.unfreeze");
2387 }
2388 } 2396 }
2397 iString *src = collectNew_String();
2398 setCStr_String(src, "# ${heading.glyphfinder.results}\n\n");
2399 iRangecc path = iNullRange;
2400 iBool isFirst = iTrue;
2401 while (nextSplit_Rangecc(range_Command(cmd, "packs"), ",", &path)) {
2402 if (isFirst) {
2403 appendCStr_String(src, "${glyphfinder.results}\n\n");
2404 }
2405 iRangecc fpath = path;
2406 iRangecc fsize = path;
2407 fpath.end = strchr(fpath.start, ';');
2408 fsize.start = fpath.end + 1;
2409 const uint32_t size = strtoul(fsize.start, NULL, 10);
2410 appendFormat_String(src, "=> gemini://skyjake.fi/fonts/%s %s (%.1f MB)\n",
2411 cstr_Rangecc(fpath),
2412 cstr_Rangecc(fpath),
2413 (double) size / 1.0e6);
2414 isFirst = iFalse;
2415 }
2416 if (isFirst) {
2417 appendFormat_String(src, "${glyphfinder.results.empty}\n");
2418 }
2419 appendCStr_String(src, "\n=> about:fonts ${menu.fonts}");
2420 iDocumentWidget *page = newTab_App(NULL, iTrue);
2421 translate_Lang(src);
2422 setUrlAndSource_DocumentWidget(page,
2423 collectNewCStr_String(""),
2424 collectNewCStr_String("text/gemini"),
2425 utf8_String(src));
2389 return iTrue; 2426 return iTrue;
2390 } 2427 }
2391#endif
2392 else if (equal_Command(cmd, "font.set")) { 2428 else if (equal_Command(cmd, "font.set")) {
2393 if (!isFrozen) { 2429 if (!isFrozen) {
2394 setFreezeDraw_MainWindow(get_MainWindow(), iTrue); 2430 setFreezeDraw_MainWindow(get_MainWindow(), iTrue);