From b24db3694bbfbbe1ef753ace78ce8e4f3fa1295b Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:21:21 +0530 Subject: [PATCH 01/10] Update package installation for CI Integration --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 4edb89f7f..cb6f63a41 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -19,7 +19,7 @@ jobs: sudo apt install -y build-essential sudo git wget curl python3-sphinx rsync # install sugar-toolkit-gtk3 dependencies - sudo apt install -y python-all-dev python3-all-dev libgtk-3-dev + sudo apt install -y python-dev-is-python3 python3-dev libgtk-3-dev sudo apt install -y libgdk-pixbuf2.0-dev libsm-dev libice-dev librsvg2-dev sudo apt install -y libxfixes-dev libxi-dev libx11-dev gettext intltool sudo apt install -y libxml-parser-perl x11proto-core-dev libasound2-dev From a6a53773ad98d8a994dc37010954b0c80c51df4e Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:40:49 +0530 Subject: [PATCH 02/10] Refactor: Replace deprecated GDK functions and remove unused variable - Replaced deprecated `gdk_error_trap_push` with `gdk_x11_display_error_trap_push`. - Replaced deprecated `gdk_flush` with `gdk_display_flush`. - Replaced deprecated `gdk_error_trap_pop` with `gdk_x11_display_error_trap_pop`. - Removed unused variable `key` to clean up the code. - Ensured compatibility with the latest GDK/GTK versions. --- src/sugar3/sugar-key-grabber.c | 218 ++++++++++++++++----------------- 1 file changed, 108 insertions(+), 110 deletions(-) diff --git a/src/sugar3/sugar-key-grabber.c b/src/sugar3/sugar-key-grabber.c index a4c00968f..2c8bae45b 100644 --- a/src/sugar3/sugar-key-grabber.c +++ b/src/sugar3/sugar-key-grabber.c @@ -22,7 +22,6 @@ #include #include #include - #include "sugar-key-grabber.h" #include "eggaccelerators.h" #include "sugar-marshal.h" @@ -37,9 +36,9 @@ #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK) enum { - KEY_PRESSED, - KEY_RELEASED, - N_SIGNALS + KEY_PRESSED, + KEY_RELEASED, + N_SIGNALS }; typedef struct { @@ -56,30 +55,30 @@ static guint signals[N_SIGNALS]; static void free_key_info(Key *key_info) { - g_free(key_info->key); - g_free(key_info); + g_free(key_info->key); + g_free(key_info); } static void sugar_key_grabber_dispose (GObject *object) { - SugarKeyGrabber *grabber = SUGAR_KEY_GRABBER(object); + SugarKeyGrabber *grabber = SUGAR_KEY_GRABBER(object); - if (grabber->keys) { - g_list_foreach(grabber->keys, (GFunc)free_key_info, NULL); - g_list_free(grabber->keys); - grabber->keys = NULL; - } + if (grabber->keys) { + g_list_foreach(grabber->keys, (GFunc)free_key_info, NULL); + g_list_free(grabber->keys); + grabber->keys = NULL; + } } static void sugar_key_grabber_class_init(SugarKeyGrabberClass *grabber_class) { - GObjectClass *g_object_class = G_OBJECT_CLASS (grabber_class); + GObjectClass *g_object_class = G_OBJECT_CLASS (grabber_class); - g_object_class->dispose = sugar_key_grabber_dispose; + g_object_class->dispose = sugar_key_grabber_dispose; - signals[KEY_PRESSED] = g_signal_new ("key-pressed", + signals[KEY_PRESSED] = g_signal_new ("key-pressed", G_TYPE_FROM_CLASS (grabber_class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (SugarKeyGrabberClass, key_pressed), @@ -89,7 +88,7 @@ sugar_key_grabber_class_init(SugarKeyGrabberClass *grabber_class) G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT); - signals[KEY_RELEASED] = g_signal_new ("key-released", + signals[KEY_RELEASED] = g_signal_new ("key-released", G_TYPE_FROM_CLASS (grabber_class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (SugarKeyGrabberClass, key_released), @@ -104,73 +103,73 @@ sugar_key_grabber_class_init(SugarKeyGrabberClass *grabber_class) char * sugar_key_grabber_get_key(SugarKeyGrabber *grabber, guint keycode, guint state) { - GList *l; + GList *l; - for (l = grabber->keys; l != NULL; l = l->next) { - Key *keyinfo = (Key *)l->data; - if ((keyinfo->keycode == keycode) && - ((state & USED_MODS) == keyinfo->state)) { - return g_strdup(keyinfo->key); - } - } + for (l = grabber->keys; l != NULL; l = l->next) { + Key *keyinfo = (Key *)l->data; + if ((keyinfo->keycode == keycode) && + ((state & USED_MODS) == keyinfo->state)) { + return g_strdup(keyinfo->key); + } + } - return NULL; + return NULL; } static GdkFilterReturn filter_events(GdkXEvent *xevent, GdkEvent *event, gpointer data) { - SugarKeyGrabber *grabber = (SugarKeyGrabber *)data; - XEvent *xev = (XEvent *)xevent; - - if (xev->type == KeyRelease) { - int return_value; - g_signal_emit (grabber, signals[KEY_RELEASED], 0, xev->xkey.keycode, - xev->xkey.state, xev->xkey.time, &return_value); - if(return_value) - return GDK_FILTER_REMOVE; - } - - if (xev->type == KeyPress) { - int return_value; - g_signal_emit (grabber, signals[KEY_PRESSED], 0, xev->xkey.keycode, - xev->xkey.state, xev->xkey.time, &return_value); - if(return_value) - return GDK_FILTER_REMOVE; - } - - if (xev->type == GenericEvent) { - XIDeviceEvent *ev; - int return_value = FALSE; - - ev = (XIDeviceEvent *) ((XGenericEventCookie *) xev)->data; - - if (ev->evtype == XI_KeyPress) { - g_signal_emit (grabber, signals[KEY_PRESSED], 0, - ev->detail, ev->mods.effective, ev->time, &return_value); - } else if (ev->evtype == XI_KeyRelease) { - g_signal_emit (grabber, signals[KEY_RELEASED], 0, - ev->detail, ev->mods.effective, ev->time, &return_value); - } - - if (return_value) - return GDK_FILTER_REMOVE; - } - - - return GDK_FILTER_CONTINUE; + SugarKeyGrabber *grabber = (SugarKeyGrabber *)data; + XEvent *xev = (XEvent *)xevent; + + if (xev->type == KeyRelease) { + int return_value; + g_signal_emit (grabber, signals[KEY_RELEASED], 0, xev->xkey.keycode, + xev->xkey.state, xev->xkey.time, &return_value); + if(return_value) + return GDK_FILTER_REMOVE; + } + + if (xev->type == KeyPress) { + int return_value; + g_signal_emit (grabber, signals[KEY_PRESSED], 0, xev->xkey.keycode, + xev->xkey.state, xev->xkey.time, &return_value); + if(return_value) + return GDK_FILTER_REMOVE; + } + + if (xev->type == GenericEvent) { + XIDeviceEvent *ev; + int return_value = FALSE; + + ev = (XIDeviceEvent *) ((XGenericEventCookie *) xev)->data; + + if (ev->evtype == XI_KeyPress) { + g_signal_emit (grabber, signals[KEY_PRESSED], 0, + ev->detail, ev->mods.effective, ev->time, &return_value); + } else if (ev->evtype == XI_KeyRelease) { + g_signal_emit (grabber, signals[KEY_RELEASED], 0, + ev->detail, ev->mods.effective, ev->time, &return_value); + } + + if (return_value) + return GDK_FILTER_REMOVE; + } + + + return GDK_FILTER_CONTINUE; } static void sugar_key_grabber_init(SugarKeyGrabber *grabber) { - GdkScreen *screen; + GdkScreen *screen; - screen = gdk_screen_get_default(); - grabber->root = gdk_screen_get_root_window(screen); - grabber->keys = NULL; + screen = gdk_screen_get_default(); + grabber->root = gdk_screen_get_root_window(screen); + grabber->keys = NULL; - gdk_window_add_filter(grabber->root, filter_events, grabber); + gdk_window_add_filter(grabber->root, filter_events, grabber); } /* grab_key and grab_key_real are from @@ -230,11 +229,10 @@ grab_key (SugarKeyGrabber *grabber, Key *key, gboolean grab) **/ void sugar_key_grabber_grab_keys(SugarKeyGrabber *grabber, - const gchar *keys[], - gint n_elements) + const gchar *keys[], + gint n_elements) { gint i; - const char *key; Key *keyinfo = NULL; gint min_keycodes, max_keycodes; @@ -242,8 +240,8 @@ sugar_key_grabber_grab_keys(SugarKeyGrabber *grabber, &min_keycodes, &max_keycodes); for (i = 0; i < n_elements; i++){ - keyinfo = g_new0 (Key, 1); - keyinfo->key = g_strdup(keys[i]); + keyinfo = g_new0 (Key, 1); + keyinfo->key = g_strdup(keys[i]); if (!egg_accelerator_parse_virtual (keys[i], &keyinfo->keysym, &keyinfo->keycode, @@ -257,12 +255,12 @@ sugar_key_grabber_grab_keys(SugarKeyGrabber *grabber, continue; } - gdk_error_trap_push(); + gdk_x11_display_error_trap_push(gdk_display_get_default()); grab_key(grabber, keyinfo, TRUE); - gdk_flush(); - gint error_code = gdk_error_trap_pop (); + gdk_display_flush(gdk_display_get_default()); + gint error_code = gdk_x11_display_error_trap_pop(gdk_display_get_default()); if(!error_code) grabber->keys = g_list_append(grabber->keys, keyinfo); else if(error_code == BadAccess) @@ -279,37 +277,37 @@ sugar_key_grabber_grab_keys(SugarKeyGrabber *grabber, gboolean sugar_key_grabber_is_modifier(SugarKeyGrabber *grabber, guint keycode, guint mask) { - Display *xdisplay; - XModifierKeymap *modmap; - gint start, end, i, mod_index; - gboolean is_modifier = FALSE; - - xdisplay = GDK_DISPLAY_XDISPLAY(gdk_display_get_default ()); - - modmap = XGetModifierMapping(xdisplay); - - if (mask != -1) { - mod_index = 0; - mask = mask >> 1; - while (mask != 0) { - mask = mask >> 1; - mod_index += 1; - } - start = mod_index * modmap->max_keypermod; - end = (mod_index + 1) * modmap->max_keypermod; - } else { - start = 0; - end = 8 * modmap->max_keypermod; - } - - for (i = start; i < end; i++) { - if (keycode == modmap->modifiermap[i]) { - is_modifier = TRUE; - break; - } - } - - XFreeModifiermap (modmap); - - return is_modifier; + Display *xdisplay; + XModifierKeymap *modmap; + gint start, end, i, mod_index; + gboolean is_modifier = FALSE; + + xdisplay = GDK_DISPLAY_XDISPLAY(gdk_display_get_default ()); + + modmap = XGetModifierMapping(xdisplay); + + if (mask != -1) { + mod_index = 0; + mask = mask >> 1; + while (mask != 0) { + mask = mask >> 1; + mod_index += 1; + } + start = mod_index * modmap->max_keypermod; + end = (mod_index + 1) * modmap->max_keypermod; + } else { + start = 0; + end = 8 * modmap->max_keypermod; + } + + for (i = start; i < end; i++) { + if (keycode == modmap->modifiermap[i]) { + is_modifier = TRUE; + break; + } + } + + XFreeModifiermap (modmap); + + return is_modifier; } From b05ad943706fd1ca892f3dfc0cd19bbd0149f00c Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:49:58 +0530 Subject: [PATCH 03/10] Fix: Update documentation build script paths - Updated `make-doc.sh` to ensure correct paths for Sphinx documentation generation. - Ensured `sphinx-apidoc` generates documentation from the correct source directory. - Added `make -C doc html` to build the HTML documentation in the correct directory. --- ci/docs.sh | 9 ++++----- make-doc.sh | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/ci/docs.sh b/ci/docs.sh index 6e0f969a0..8b8eff81d 100755 --- a/ci/docs.sh +++ b/ci/docs.sh @@ -19,14 +19,13 @@ sudo make # make documentation show-green "Building documentation" -./make-doc.sh +cd doc +make html +cd .. mkdir deploy cp -r doc/_build/html deploy/sugar3 touch deploy/.nojekyll # create an index.html so that users don't become confused show-green "Writing index.html" echo "

Page Moved

" > deploy/index.html -echo "

We have moved this page to GitHub.

" >> deploy/index.html -echo "

How did you get here? Please report any lingering links.

" >> deploy/index.html - -show-green "Done" +echo "

We have moved this page to GitHub.

" >> deploy/index.html \ No newline at end of file diff --git a/make-doc.sh b/make-doc.sh index d8721d968..5715e0801 100755 --- a/make-doc.sh +++ b/make-doc.sh @@ -1,4 +1,4 @@ #!/bin/sh -sphinx-apidoc --force --separate --output-dir=doc src -make -C doc html +sphinx-apidoc --force --separate --output-dir=doc ../src +make -C doc html \ No newline at end of file From 0ac525cb3f409b06a84e57c26af0df0a877a8105 Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:57:04 +0530 Subject: [PATCH 04/10] Enhance documentation build script with directory existence checks --- make-doc.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/make-doc.sh b/make-doc.sh index 5715e0801..5220dc1ea 100755 --- a/make-doc.sh +++ b/make-doc.sh @@ -1,4 +1,15 @@ #!/bin/sh +set -e + +if [ ! -d "../src" ]; then + echo "Error: ../src directory does not exist." + exit 1 +fi + +if [ ! -d "doc" ]; then + echo "Error: doc directory does not exist." + exit 1 +fi sphinx-apidoc --force --separate --output-dir=doc ../src make -C doc html \ No newline at end of file From 2a14ddf8650a9579dca59118d6ef0727dd1e6f2c Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:27:01 +0530 Subject: [PATCH 05/10] Add directory existence check before building documentation --- ci/docs.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/docs.sh b/ci/docs.sh index 8b8eff81d..7c8ca2aca 100755 --- a/ci/docs.sh +++ b/ci/docs.sh @@ -19,6 +19,10 @@ sudo make # make documentation show-green "Building documentation" +if [ ! -d "doc" ]; then + echo "Error: doc directory does not exist." + exit 1 +fi cd doc make html cd .. From 14451f054c953dfdcc8d674501a81efe3dd0f905 Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:34:34 +0530 Subject: [PATCH 06/10] Improve documentation build script with error handling and Sphinx integration --- ci/docs.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/docs.sh b/ci/docs.sh index 7c8ca2aca..a6dc3e4fa 100755 --- a/ci/docs.sh +++ b/ci/docs.sh @@ -19,14 +19,16 @@ sudo make # make documentation show-green "Building documentation" + if [ ! -d "doc" ]; then echo "Error: doc directory does not exist." exit 1 fi + cd doc -make html +sphinx-build -b html -d _build/doctrees . _build/html cd .. -mkdir deploy +mkdir -p deploy cp -r doc/_build/html deploy/sugar3 touch deploy/.nojekyll # create an index.html so that users don't become confused From 80643abe65e4372d321e39d7dbeadd806fdf3769 Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:42:00 +0530 Subject: [PATCH 07/10] testing --- ci/docs.sh | 13 +++---------- doc/Makefile | 8 ++++---- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/ci/docs.sh b/ci/docs.sh index a6dc3e4fa..f873fc547 100755 --- a/ci/docs.sh +++ b/ci/docs.sh @@ -19,16 +19,9 @@ sudo make # make documentation show-green "Building documentation" - -if [ ! -d "doc" ]; then - echo "Error: doc directory does not exist." - exit 1 -fi - -cd doc -sphinx-build -b html -d _build/doctrees . _build/html -cd .. -mkdir -p deploy +sphinx-build -b html -d doc/source _build/html +./make-doc.sh +mkdir deploy cp -r doc/_build/html deploy/sugar3 touch deploy/.nojekyll # create an index.html so that users don't become confused diff --git a/doc/Makefile b/doc/Makefile index 60e9ad567..d2dba0653 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -15,7 +15,7 @@ endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) doc/source # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . @@ -52,9 +52,9 @@ clean: rm -rf $(BUILDDIR)/* html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml From cfd9d5595f44f9c01962d6166990693df9d10efe Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:46:02 +0530 Subject: [PATCH 08/10] testing --- ci/docs.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ci/docs.sh b/ci/docs.sh index f873fc547..befcbafc9 100755 --- a/ci/docs.sh +++ b/ci/docs.sh @@ -19,12 +19,15 @@ sudo make # make documentation show-green "Building documentation" -sphinx-build -b html -d doc/source _build/html +sphinx-build -b html doc/source doc/_build/html ./make-doc.sh -mkdir deploy +mkdir -p deploy cp -r doc/_build/html deploy/sugar3 touch deploy/.nojekyll # create an index.html so that users don't become confused show-green "Writing index.html" echo "

Page Moved

" > deploy/index.html -echo "

We have moved this page to GitHub.

" >> deploy/index.html \ No newline at end of file +echo "

We have moved this page to GitHub.

" >> deploy/index.html +echo "

How did you get here? Please report any lingering links.

" >> deploy/index.html + +show-green "Done" \ No newline at end of file From a0c5b0705c6949d5c6016f6d52fa9725ed451794 Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:56:21 +0530 Subject: [PATCH 09/10] testing --- ci/docs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docs.sh b/ci/docs.sh index befcbafc9..5f2344d74 100755 --- a/ci/docs.sh +++ b/ci/docs.sh @@ -19,7 +19,7 @@ sudo make # make documentation show-green "Building documentation" -sphinx-build -b html doc/source doc/_build/html +sphinx-build -b html doc doc/_build/html ./make-doc.sh mkdir -p deploy cp -r doc/_build/html deploy/sugar3 From f807a5f6ca63663b34875bfd47bc5f2d10774ec0 Mon Sep 17 00:00:00 2001 From: MostlyK <135974627+MostlyKIGuess@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:57:57 +0530 Subject: [PATCH 10/10] testing --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index d2dba0653..2a02f3c98 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -15,7 +15,7 @@ endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) doc/source +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) doc # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .