From bef61b34d8a23e2e8594207c2876ce982fe0e15f Mon Sep 17 00:00:00 2001

From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= jaakko.keranen@iki.fi

Date: Fri, 18 Feb 2022 14:59:03 +0200

Subject: [PATCH 1/1] Basic opening and closing of new windows

One can create a new window with window.new and close it with the window close button.


src/app.c | 71 +++++++++++++++++++++++++++++++++++++++++++++----

src/app.h | 5 ++++

src/ui/window.c | 16 ++++++++++-

3 files changed, 86 insertions(+), 6 deletions(-)

diff --git a/src/app.c b/src/app.c

index d47c6ef1..686d8b82 100644

--- a/src/app.c

+++ b/src/app.c

@@ -125,7 +125,8 @@ struct Impl_App {

 iGmCerts *   certs;

 iVisited *   visited;

 iBookmarks * bookmarks;

 iPtrArray    popupWindows;

 iSortedArray tickers; /* per-frame callbacks, used for animations */

 uint32_t     lastTickerTime;

@@ -474,7 +475,7 @@ static const char *magicTabDocument_App_ = "tabd";

static const char *magicSidebar_App_ = "side";

enum iDocumentStateFlag {

 rootIndex1_DocumentStateFlag = iBit(2)

};

@@ -946,8 +947,10 @@ static void init_App_(iApp *d, int argc, char **argv) {

         d->initialWindowRect.size.y = toInt_String(value_CommandLineArg(arg, 0));

     }

 }

 init_PtrArray(&d->popupWindows);

 d->window = new_MainWindow(d->initialWindowRect);

 load_Visited(d->visited, dataDir_App_());

 load_Bookmarks(d->bookmarks, dataDir_App_());

 load_MimeHooks(d->mimehooks, dataDir_App_());

@@ -1012,7 +1015,11 @@ static void deinit_App(iApp *d) {

 SDL_RemoveTimer(d->autoReloadTimer);

 saveState_App_(d);

 savePrefs_App_(d);

 d->window = NULL;

 deinit_Feeds();

 save_Keys(dataDir_App_());

@@ -1027,7 +1034,6 @@ static void deinit_App(iApp *d) {

 delete_GmCerts(d->certs);

 save_MimeHooks(d->mimehooks);

 delete_MimeHooks(d->mimehooks);

 deinit_CommandLine(&d->args);

 iRelease(d->launchCommands);

 delete_String(d->execPath);

@@ -1286,7 +1292,14 @@ static iPtrArray *listWindows_App_(const iApp *d, iPtrArray *windows) {

 iReverseConstForEach(PtrArray, i, &d->popupWindows) {

     pushBack_PtrArray(windows, i.ptr);

 }

 return windows;

}

@@ -1843,6 +1856,26 @@ void removeTicker_App(iTickerFunc ticker, iAny *context) {

 remove_SortedArray(&d->tickers, &(iTicker){ context, NULL, ticker });

}

+void addWindow_App(iMainWindow *win) {

+}

+void removeWindow_App(iMainWindow *win) {

+}

+size_t numWindows_App(void) {

+}

+void setActiveWindow_App(iMainWindow *win) {

+}

void addPopup_App(iWindow *popup) {

 iApp *d = &app_;

 pushBack_PtrArray(&d->popupWindows, popup);

@@ -2121,6 +2154,22 @@ iDocumentWidget *newTab_App(const iDocumentWidget *duplicateOf, iBool switchToNe

 return doc;

}

+void closeWindow_App(iMainWindow *win) {

+}

static iBool handleIdentityCreationCommands_(iWidget *dlg, const char *cmd) {

 iApp *d = &app_;

 if (equal_Command(cmd, "ident.showmore")) {

@@ -3016,6 +3065,15 @@ iBool handleCommand_App(const char *cmd) {

#endif

     return iFalse;

 }

 else if (equal_Command(cmd, "tabs.new")) {

     const iBool isDuplicate = argLabel_Command(cmd, "duplicate") != 0;

     newTab_App(isDuplicate ? document_App() : NULL, iTrue);

@@ -3076,6 +3134,9 @@ iBool handleCommand_App(const char *cmd) {

             }

         }

     }

     else {

         postCommand_App("quit");

     }

diff --git a/src/app.h b/src/app.h

index 22fe5d46..74a5429b 100644

--- a/src/app.h

+++ b/src/app.h

@@ -122,6 +122,11 @@ iAny * findWidget_App (const char *id);

void addTicker_App (iTickerFunc ticker, iAny *context);

void addTickerRoot_App (iTickerFunc ticker, iRoot *root, iAny *context);

void removeTicker_App (iTickerFunc ticker, iAny *context);

+void addWindow_App (iMainWindow *win);

+void removeWindow_App (iMainWindow *win);

+void setActiveWindow_App (iMainWindow *win);

+void closeWindow_App (iMainWindow *win);

+size_t numWindows_App (void);

void addPopup_App (iWindow *popup);

void removePopup_App (iWindow *popup);

void postRefresh_App (void);

diff --git a/src/ui/window.c b/src/ui/window.c

index 47abf878..bc32e479 100644

--- a/src/ui/window.c

+++ b/src/ui/window.c

@@ -80,6 +80,7 @@ iDefineTypeConstructionArgs(MainWindow, (iRect rect), rect)

#if defined (iHaveNativeMenus)

/* Using native menus. */

static const iMenuItem fileMenuItems_[] = {

 { "${menu.newtab}", SDLK_t, KMOD_PRIMARY, "tabs.new" },

 { "${menu.openlocation}", SDLK_l, KMOD_PRIMARY, "navigate.focus" },

 { "---", 0, 0, NULL },

@@ -210,7 +211,9 @@ static void windowSizeChanged_MainWindow_(iMainWindow *d) {

static void setupUserInterface_MainWindow(iMainWindow *d) {

#if defined (iHaveNativeMenus)

#endif

 /* One root is created by default. */

 d->base.roots[0] = new_Root();

@@ -246,6 +249,7 @@ static void updateSize_MainWindow_(iMainWindow *d, iBool notifyAlways) {

void drawWhileResizing_MainWindow(iMainWindow *d, int w, int h) {

 if (!isDrawing_) {

     draw_MainWindow(d);

 }

}

@@ -647,6 +651,7 @@ void init_MainWindow(iMainWindow *d, iRect rect) {

}

void deinit_MainWindow(iMainWindow *d) {

 if (d->backBuf) {

     SDL_DestroyTexture(d->backBuf);

 }

@@ -830,6 +835,9 @@ static void savePlace_MainWindow_(iAny *mainWindow) {

}

static iBool handleWindowEvent_MainWindow_(iMainWindow *d, const SDL_WindowEvent *ev) {

 switch (ev->event) {

#if defined(iPlatformDesktop)

     case SDL_WINDOWEVENT_EXPOSED:

@@ -953,6 +961,7 @@ static iBool handleWindowEvent_MainWindow_(iMainWindow *d, const SDL_WindowEvent

         setCapsLockDown_Keys(iFalse);

         postCommand_App("window.focus.gained");

         d->base.isExposed = iTrue;

#if !defined (iPlatformDesktop)

         /* Returned to foreground, may have lost buffered content. */

         invalidate_MainWindow_(d, iTrue);

@@ -970,6 +979,11 @@ static iBool handleWindowEvent_MainWindow_(iMainWindow *d, const SDL_WindowEvent

         SDL_SetWindowInputFocus(d->base.win);

         postRefresh_App();

         return iTrue;

     default:

         break;

 }

--

2.25.1

Proxy Information
Original URL
gemini://git.skyjake.fi/lagrange/work%2Fv1.11/patch/bef61b34d8a23e2e8594207c2876ce982fe0e15f.patch
Status Code
Success (20)
Meta
text/plain
Capsule Response Time
69.01732 milliseconds
Gemini-to-HTML Time
3.651171 milliseconds

This content has been proxied by September (3851b).