diff options
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 66 |
1 files changed, 51 insertions, 15 deletions
@@ -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 | ||
2252 | void 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 | |||
2248 | static void invalidateCachedDocuments_App_(void) { | 2259 | static 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); |