Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xsnow for openSUSE:Factory checked in at 2026-11-02 16:44:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xsnow (Old) and /work/SRC/openSUSE:Factory/.xsnow.new.1255 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xsnow" Mon Nov 2 16:44:26 2026 rev:21 rq:1394418 version:3.9.10 Changes: -------- --- /work/SRC/openSUSE:Factory/xsnow/xsnow.changes 2026-10-23 20:23:46.601194294 +0200 +++ /work/SRC/openSUSE:Factory/.xsnow.new.1255/xsnow.changes 2026-11-02 16:44:27.652504894 +0100 @@ -1,0 +2,16 @@ +Fri Oct 30 21:56:32 UTC 2026 - Carsten Ziepke <[email protected]> + +- Update to version 3.9.10 + * 01: Again! some adaptions on determining the size of the + transparent click-through window. Problem was that + transparent panels loose the transparency in cinnamon. + see: src/main.c: make_fullmaxscreen() + * 02: some code cleanup + scenery.c: scenery_draw(): wait a little bit before drawing, + with multiple monitors the scenery changes after + startup. + many files: change Flags.Done into global.Done + main.c: sometimes, ending xsnow results in a core dump. + - give threads some time o properly finish + +------------------------------------------------------------------- Old: ---- xsnow-3.9.9.tar.gz New: ---- xsnow-3.9.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xsnow.spec ++++++ --- /var/tmp/diff_new_pack.ZeASmS/_old 2026-11-02 16:44:28.995561087 +0100 +++ /var/tmp/diff_new_pack.ZeASmS/_new 2026-11-02 16:44:28.999561254 +0100 @@ -17,7 +17,7 @@ Name: xsnow -Version: 3.9.9 +Version: 3.9.10 Release: 0 Summary: A Christmas Animation License: GPL-3.0-or-later ++++++ xsnow-3.9.9.tar.gz -> xsnow-3.9.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/ChangeLog new/xsnow-3.9.10/ChangeLog --- old/xsnow-3.9.9/ChangeLog 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/ChangeLog 2026-10-04 09:25:26.000000000 +0200 @@ -1,3 +1,16 @@ +version 3.9.10 + 01: Again! some adaptions on determining the size of the transparent + click-through window. Problem was that transparent panels loose + the transparency in cinnamon. + see: src/main.c: make_fullmaxscreen() + 02: some code cleanup + scenery.c: scenery_draw(): wait a little bit before drawing, + with multiple monitors the scenery changes after + startup. + many files: change Flags.Done into global.Done + main.c: sometimes, ending xsnow results in a core dump. + - give threads some time o properly finish + version 3.9.9 01: snow.c, xsnow.h and others: implement rotating flakes, following the kind instructions of Rick Jansen, the godfather of xsnow. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/configure new/xsnow-3.9.10/configure --- old/xsnow-3.9.9/configure 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/configure 2026-10-04 09:25:26.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for xsnow 3.9.9. +# Generated by GNU Autoconf 2.72 for xsnow 3.9.10. # # Report bugs to <[email protected]>. # @@ -604,8 +604,8 @@ # Identity of this package. PACKAGE_NAME='xsnow' PACKAGE_TARNAME='xsnow' -PACKAGE_VERSION='3.9.9' -PACKAGE_STRING='xsnow 3.9.9' +PACKAGE_VERSION='3.9.10' +PACKAGE_STRING='xsnow 3.9.10' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1391,7 +1391,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures xsnow 3.9.9 to adapt to many kinds of systems. +'configure' configures xsnow 3.9.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1466,7 +1466,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xsnow 3.9.9:";; + short | recursive ) echo "Configuration of xsnow 3.9.10:";; esac cat <<\_ACEOF @@ -1588,7 +1588,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xsnow configure 3.9.9 +xsnow configure 3.9.10 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -2029,7 +2029,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xsnow $as_me 3.9.9, which was +It was created by xsnow $as_me 3.9.10, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3722,7 +3722,7 @@ # Define the identity of the package. PACKAGE='xsnow' - VERSION='3.9.9' + VERSION='3.9.10' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -13812,7 +13812,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xsnow $as_me 3.9.9, which was +This file was extended by xsnow $as_me 3.9.10, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13880,7 +13880,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -xsnow config.status 3.9.9 +xsnow config.status 3.9.10 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/configure.ac new/xsnow-3.9.10/configure.ac --- old/xsnow-3.9.9/configure.ac 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/configure.ac 2026-10-04 09:25:26.000000000 +0200 @@ -23,7 +23,7 @@ #-endcopyright- AC_PREREQ([2.69]) -AC_INIT([xsnow],[3.9.9],[[email protected]]) +AC_INIT([xsnow],[3.9.10],[[email protected]]) AC_CONFIG_SRCDIR([src/xsnow.h]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/Santa.c new/xsnow-3.9.10/src/Santa.c --- old/xsnow-3.9.9/src/Santa.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/Santa.c 2026-10-04 09:25:26.000000000 +0200 @@ -264,7 +264,7 @@ { (void) d; P("do_usanta %d\n",counter++); - if (Flags.Done) + if (global.Done) return FALSE; #define RETURN do { return TRUE ; } while(0) if (NOTACTIVE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/aurora.c new/xsnow-3.9.10/src/aurora.c --- old/xsnow-3.9.9/src/aurora.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/aurora.c 2026-10-04 09:25:26.000000000 +0200 @@ -216,6 +216,8 @@ void aurora_draw(cairo_t *cr) { P("aurora_draw %d %d\n",Flags.Aurora,global.counter++); + if (global.Done) + return; if(Flags.Aurora == 0) return; lock_copy(); @@ -245,7 +247,7 @@ P("do_aurora %d %d\n",Flags.Aurora,global.counter++); while(1) { - if (Flags.Done) + if (global.Done) pthread_exit(NULL); if(!(Flags.Aurora == 0 || NOTACTIVE)) { @@ -334,6 +336,8 @@ P("height: %d %f\n",j,scale*cairo_image_surface_get_height(vertsurf)); if(1) { + if (global.Done) + pthread_exit(NULL); // draw aurora cairo_set_source_surface (aurora_cr, vertsurf, a->step*a->z[j].x, a->z[j].y - imax/scale); cairo_paint_with_alpha(aurora_cr,alpha*a->za[j]); @@ -367,6 +371,8 @@ P("height: %d %f\n",j,scale*cairo_image_surface_get_height(vertsurf)); if(1) { + if (global.Done) + pthread_exit(NULL); // draw fuzz cairo_set_source_surface (aurora_cr, vertsurf, a->step*a->fuzz[j].x, a->fuzz[j].y - imax/scale); cairo_paint_with_alpha(aurora_cr,alpha*a->fuzz[j].a); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/birds.c new/xsnow-3.9.10/src/birds.c --- old/xsnow-3.9.9/src/birds.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/birds.c 2026-10-04 09:25:26.000000000 +0200 @@ -291,7 +291,7 @@ { while(1) { - if (!(Flags.Done || INACTIVE)) + if (!(global.Done || INACTIVE)) { lock(); @@ -441,7 +441,7 @@ int do_update_pos_birds(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; LEAVE_IF_INACTIVE; @@ -776,7 +776,7 @@ static int do_wings(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; LEAVE_IF_INACTIVE; @@ -946,7 +946,7 @@ // x: 0.1 .. 0.8 // y: 0.4 .. 0.6 // z: dependent on Flags.AttrSpace - if (Flags.Done) + if (global.Done) return FALSE; if (Flags.FollowSanta && !Flags.BirdsOnly) return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/blowoff.c new/xsnow-3.9.10/src/blowoff.c --- old/xsnow-3.9.9/src/blowoff.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/blowoff.c 2026-10-04 09:25:26.000000000 +0200 @@ -67,7 +67,7 @@ // determine if fallensnow should be handled for fsnow int do_blowoff(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; if (NOTACTIVE || !Flags.BlowSnow) return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/docs.c new/xsnow-3.9.10/src/docs.c --- old/xsnow-3.9.9/src/docs.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/docs.c 2026-10-04 09:25:26.000000000 +0200 @@ -408,6 +408,7 @@ manout(" ","is transparent, but not click-through."); manout(" ","Flags to be tried in this case include: -root, -doublebuffer, -xwininfo, -id."); manout(".","Here follow some window managers with their issues:"); + manout(".","(Note: this list was made some years ago, it needs updating.)"); manout("."," "); manout("Tiling window managers","Here you need to float windows with class=Xsnow."); manout("AWESOME","Without compositor: no issues."); @@ -436,7 +437,7 @@ manout(" ","With compositor: no issues."); manout("MATE","No issues."); manout("OPENBOX","No issues."); - manout("PLASMA (KDE)","No issues."); + manout("PLASMA (KDE)","No issues, but see BUGS."); manout("SPECTRWM","Various issues. In any case you need in spectrwm.conf:"); manout("."," quirk[Xsnow] = FLOAT"); manout("TWM","Without compositor: no issues."); @@ -484,7 +485,7 @@ manout(".","- In XFCE, compositing must be enabled for xsnow."); manout(" "," Settings -> Window Manager Tweaks -> Compositor -> Enable display compositing"); manout(".","- Depending on the window manager, snowing in 'all monitors' results in snowing"); - manout(" "," in one of the monitors. This happens for example in KDE."); + manout(" "," in one of the monitors. This happens for example in KDE/plasma."); manout(".","- In multi-screen environments, it depends on the display settings"); manout(" "," if it is snowing on all screens. Experiment!"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/doit.h new/xsnow-3.9.10/src/doit.h --- old/xsnow-3.9.9/src/doit.h 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/doit.h 2026-10-04 09:25:26.000000000 +0200 @@ -37,7 +37,6 @@ DOIT_I(CheckGtk ,1 ,1 ) \ DOIT_I(Defaults ,0 ,0 ) \ DOIT_I(Desktop ,0 ,0 ) \ - DOIT_I(Done ,0 ,0 ) \ DOIT_I(ForceRoot ,0 ,0 ) \ DOIT_I(FullScreen ,0 ,0 ) \ DOIT_I(HideMenu ,0 ,0 ) \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/fallensnow.c new/xsnow-3.9.10/src/fallensnow.c --- old/xsnow-3.9.9/src/fallensnow.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/fallensnow.c 2026-10-04 09:25:26.000000000 +0200 @@ -244,7 +244,7 @@ (void)d; while(1) { - if (Flags.Done) + if (global.Done) pthread_exit(NULL); if (!NOTACTIVE) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/main.c new/xsnow-3.9.10/src/main.c --- old/xsnow-3.9.9/src/main.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/main.c 2026-10-04 09:25:26.000000000 +0200 @@ -183,7 +183,6 @@ static int do_full_trans(gpointer widget); static int do_fadein(gpointer); static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data); -//static int do_display_dimensions_ready = 0; static int signal_caught = 0; static char *StopFile; /**********************************************************************************************/ @@ -345,6 +344,9 @@ global.Transparency = 100; + global.init_ready = 0; + + StopFile = (char*) malloc(sizeof(char)*(strlen(getenv("HOME"))+1+strlen(STOPFILE)+1)); assert(StopFile); strcpy(StopFile,getenv("HOME")); @@ -417,9 +419,6 @@ if (strstr(Flags.SnowColor,"yellow") != NULL) printf("\n%s\n\n",_("Warning: don't eat yellow snow!")); - // set global.Transparency equal to Flags.Transparency: - adapt_transparency(); - // make a copy of all flags, before gtk_init() maybe removes some. // we need this at a restart of the program. // we need to remove @@ -610,7 +609,7 @@ ui_set_sticky(Flags.AllWorkspaces); add_to_mainloop(PRIORITY_DEFAULT, time_desktop_type, do_show_desktop_type); } - Flags.Done = 0; + global.Done = 0; windows_init(); moon_init(); aurora_init(); @@ -655,11 +654,13 @@ // main loop gtk_main(); - if (SnowWinName) free(SnowWinName); + /* + if (SnowWinName) free(SnowWinName); - XClearWindow(global.display, global.SnowWin); - XFlush(global.display); - XCloseDisplay(global.display); //also frees the GC's, pixmaps and other resources on display + XClearWindow(global.display, global.SnowWin); + XFlush(global.display); + XCloseDisplay(global.display); //also frees the GC's, pixmaps and other resources on display + */ if (DoRestart) { @@ -1166,7 +1167,7 @@ // int do_ui_check(void *d) { - if (Flags.Done) + if (global.Done) gtk_main_quit(); if (Flags.NoMenu) @@ -1249,7 +1250,7 @@ // this can happen after changing of the displays settings // If the size has been changed, we restart the program (void)d; - if (Flags.Done) + if (global.Done) return FALSE; P("Trans: %d xxposures: %d Desktop: %d\n", global.Trans, global.xxposures, global.Desktop); @@ -1259,7 +1260,7 @@ if (global.ForceRestart) { DoRestart = 1; - Flags.Done = 1; + letshalt(); I(_("Restart due to change of screen or language settings ...\n")); } return TRUE; @@ -1269,7 +1270,7 @@ { (void)d; P("do_event %d\n",counter++); - if (Flags.Done) + if (global.Done) return FALSE; XEvent ev; XFlush(global.display); @@ -1319,7 +1320,7 @@ if (unlink(StopFile) != 0) return TRUE; printf("Xsnow: halting because of existence of '%s'\n",StopFile); - Flags.Done = 1; + letshalt(); return FALSE; } @@ -1347,7 +1348,7 @@ int do_show_range_etc(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; if (Flags.NoMenu) @@ -1380,7 +1381,7 @@ int do_testing(void *d) { (void)d; - if (Flags.Done) + if (global.Done) return FALSE; P("SnowWinX: %d SnowWinY: %d SnowWinWidth: %d SnowWinHeight: %d\n",global.SnowWinX,global.SnowWinY,global.SnowWinWidth, global.SnowWinHeight); @@ -1403,7 +1404,7 @@ return; } global.HaltedByInterrupt = signum; - Flags.Done = 1; + letshalt(); } int XsnowErrors(Display *dpy, XErrorEvent *err) @@ -1420,7 +1421,7 @@ if (++count > countmax) { snprintf(global.Message,sizeof(global.Message),_("More than %d errors, I quit!"),countmax); - Flags.Done = 1; + letshalt(); } return 0; } @@ -1447,10 +1448,13 @@ void drawit(cairo_t *cr) { - P("drawit %d %p\n",global.counter++,(void *)cr); + P("drawit %d %p %d\n",global.counter++,(void *)cr,global.init_ready); - if (Flags.Done) + if (global.Done) + return; + if (!global.init_ready) return; + P("drawit1 %d %p\n",global.counter++,(void *)cr); if(global.UseDouble) { @@ -1550,12 +1554,6 @@ // Make sure TransA is fullscreen or maximized and below or above as desired. if(global.Trans) { - if (Flags.Screen < 0 && nscreens > 1) - { - make_fullmaxscreen(); - } - else - gtk_window_maximize(GTK_WINDOW(TransA)); set_below_above(); } @@ -1567,12 +1565,21 @@ int do_display_dimensions(void *d) { (void)d; - //do_display_dimensions_ready = 1; - if (Flags.Done) + if (global.Done) return FALSE; + static int counter = 0; + + if(counter == 1) + // fade global.Transparency from 100 to Flags.Transparency: + adapt_transparency(); + if (!SnowWinChanged) + { + if (++counter >1) + global.init_ready = 1; return TRUE; + } SnowWinChanged = 0; P("do_displaydimensions: calling DisplayDimensions()\n"); @@ -1600,18 +1607,22 @@ SetWindowScale(); } fflush(stdout); + if (++counter >1) + global.init_ready = 1; return TRUE; } int do_draw_all(gpointer widget) { static int counter = 0; - if (Flags.Done) + if (global.Done) return FALSE; P("do_draw_all %d %p\n",global.counter++,(void *)widget); - if (global.Trans && counter < 4) // to be sure we repeat this 5 times - make_fullmaxscreen(); // a bit strange that we have to repeat this here ... - counter++; + if (global.Trans && counter < 1) + { + make_fullmaxscreen(); + counter++; + } // this will result in a call of on_draw_event(): gtk_widget_queue_draw(GTK_WIDGET(widget)); @@ -1670,12 +1681,19 @@ int do_stopafter(void *d) { - Flags.Done = 1; + letshalt(); + sleep(1); // give threads time to stop printf(_("Halting because of flag %s\n"),"-stopafter"); return FALSE; (void)d; } +void letshalt() +{ + global.Done = 1; + sleep(1); // give threads time to stop +} + void mybindtestdomain() { P("main: Flags.Language:%s\n",Flags.Language); @@ -1807,11 +1825,6 @@ UpdateFallenSnowAtBottom(); -#if 0 - // not needed, will be taken care of by do_display_dimensions()->DisplayDimensions() - RedrawTrees(); -#endif - SetMaxScreenSnowDepth(); SetMaxWinSnowDepth(); if(!global.IsDouble) @@ -1843,25 +1856,63 @@ // prevent from appearing in taskbar: gtk_window_set_skip_taskbar_hint(GTK_WINDOW(TransA),TRUE); gtk_window_set_skip_pager_hint (GTK_WINDOW(TransA),TRUE); - if (Flags.Screen < 0) + GdkWindow *gdkwin = gtk_widget_get_window(TransA); + int nmonitors = xinerama(global.display, -1, NULL, NULL, NULL, NULL); + if (Flags.Screen < 0 && nmonitors>1) { - static GdkWindow *gdkwin = NULL; - static int nmonitors = 0; - if (!nmonitors) - nmonitors = xinerama(global.display, -1, NULL, NULL, NULL, NULL); - if (nmonitors == 1) // return if number of monitors == 1 - return; - if (!gdkwin) - gdkwin = gtk_widget_get_window(TransA); gdk_window_set_fullscreen_mode(gdkwin,GDK_FULLSCREEN_ON_ALL_MONITORS); - gtk_window_fullscreen(GTK_WINDOW(TransA)); + gdk_window_fullscreen(gdkwin); + int w, h, x, y, xo, yo; + for (int i=0; i<20; i++) + { + // it seems that on my system, there must be at least + // 300 microseconds delay after gdk_window_get_geometry() + // to get the correct x, y, w and h values. + // since this function is called only once, we execute + // this silly loop. + gdk_window_get_geometry(gdkwin, &x, &y, &w, &h); + usleep(1000); + } + P("TransA, all monitors fullscreen, w: %d, h: %d, x: %d, y: %d\n",w,h,x,y); + gdk_window_unfullscreen(gdkwin); + P("visible: %d\n",gdk_window_is_visible(gdkwin)); + for (int i=0; i<20; i++) // once is not enough, it seems. why? + { + // it seems that on my system, there must be at least + // 300 microseconds delay after gdk_window_get_origin() + // to get the correct xo and yo values. + // since this function is called only once, we execute + // this silly loop. + gdk_window_get_origin(gdkwin, &xo, &yo); + usleep(1000); + } + P("origin: %d %d\n",xo,yo); + gdk_window_move_resize(gdkwin,x,y,w-xo,h-yo); + gdk_window_get_geometry(gdkwin, &x, &y, &w, &h); + P("TransA, all monitors unfullscreen, w: %d, h: %d, x: %d, y: %d\n",w,h,x,y); + gdk_window_get_origin(gdkwin, &xo, &yo); + P("origin: %d %d\n",xo,yo); } else + { gtk_window_maximize(GTK_WINDOW(TransA)); + int w, h, x, y; + gtk_window_get_size(GTK_WINDOW(TransA),&w,&h); + gtk_window_get_position(GTK_WINDOW(TransA),&x,&y); + P("TransA, maximized, w: %d, h: %d, x: %d, y: %d\n",w,h,x,y); + gtk_window_set_default_size(GTK_WINDOW(TransA),w,h); + gtk_window_unmaximize(GTK_WINDOW(TransA)); + gdk_window_move_resize(gdkwin,x,y,w,h); + gtk_window_get_size(GTK_WINDOW(TransA),&w,&h); + gtk_window_get_position(GTK_WINDOW(TransA),&x,&y); + P("TransA, unmaximized, w: %d, h: %d, x: %d, y: %d\n",w,h,x,y); + } + } void adapt_transparency() { + P("adapt_transparency\n"); float dt = 0.04; fadein.count_max = time_fadein/dt; fadein.counter = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/meteor.c new/xsnow-3.9.10/src/meteor.c --- old/xsnow-3.9.9/src/meteor.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/meteor.c 2026-10-04 09:25:26.000000000 +0200 @@ -116,7 +116,7 @@ { (void)data; P("do_emeteor %d\n",global.counter++); - if (Flags.Done) + if (global.Done) return FALSE; if (!meteor.active || NOTACTIVE) return TRUE; @@ -151,7 +151,7 @@ { (void)d; P("do_meteor %d\n",global.counter++); - if (Flags.Done) + if (global.Done) return FALSE; if (!(NOTACTIVE || meteor.active || Flags.NoMeteors)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/moon.c new/xsnow-3.9.10/src/moon.c --- old/xsnow-3.9.9/src/moon.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/moon.c 2026-10-04 09:25:26.000000000 +0200 @@ -223,7 +223,7 @@ (void)d; static int xdirection = 1; static int ydirection = 1; - if (Flags.Done) + if (global.Done) return FALSE; LEAVE_IF_INACTIVE; if(!Flags.Moon) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/scenery.c new/xsnow-3.9.10/src/scenery.c --- old/xsnow-3.9.9/src/scenery.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/scenery.c 2026-10-04 09:25:26.000000000 +0200 @@ -129,9 +129,13 @@ int scenery_draw(cairo_t *cr) { - if(Flags.NoTrees) return TRUE; + if (!global.init_ready) + return TRUE; + //static int counter = 0; + //if (counter++ < 8) // to prevent transients when using multiple monitors + // return TRUE; for (int i=0; i<NTrees; i++) { Treeinfo *tree = Trees[i]; @@ -223,7 +227,7 @@ int do_initbaum(void *d) { (void)d; - if (Flags.Done) + if (global.Done) return FALSE; P("%d do_initbaum %d %d\n",global.counter++,Newtrees, Flags.NoTrees); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/snow.c new/xsnow-3.9.10/src/snow.c --- old/xsnow-3.9.9/src/snow.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/snow.c 2026-10-04 09:25:26.000000000 +0200 @@ -205,7 +205,7 @@ { if (Flags.NoSnowFlakes) return TRUE; - if (Flags.Done) + if (global.Done) return FALSE; P("snow_draw %d\n",global.counter++); @@ -296,7 +296,7 @@ int do_genflakes(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; #define RETURN do {Prevtime = TNow; return TRUE;} while (0) @@ -727,7 +727,7 @@ int do_initsnow(void *d) { P("initsnow %d %d\n",global.FlakeCount,counter++); - if (Flags.Done) + if (global.Done) return FALSE; // first, kill all snowflakes KillFlakes = 1; @@ -745,7 +745,7 @@ int do_show_flakecount(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; ui_show_nflakes(global.FlakeCount); return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/stars.c new/xsnow-3.9.10/src/stars.c --- old/xsnow-3.9.9/src/stars.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/stars.c 2026-10-04 09:25:26.000000000 +0200 @@ -197,7 +197,7 @@ int do_ustars(void *d) { - if (Flags.Done) + if (global.Done) return FALSE; if (NOTACTIVE) return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/transwindow.c new/xsnow-3.9.10/src/transwindow.c --- old/xsnow-3.9.9/src/transwindow.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/transwindow.c 2026-10-04 09:25:26.000000000 +0200 @@ -111,6 +111,19 @@ // set full screen if so desired: P("xscreen: %d\n",xscreen); + gtk_window_set_default_size(GTK_WINDOW(transwindow),100,100); + gtk_window_move(GTK_WINDOW(transwindow),40,40); + gtk_widget_show(transwindow); + GdkWindow *gdkwin = gtk_widget_get_window(GTK_WIDGET(transwindow)); + P("gdkwin: %p %p\n",(void*)gdkwin,(void*)transwindow); + + // Ok, I admit: this all is a mess. Here a first approximation is + // made for the location and size of the transparent window. + // Later on, if needed (especially when using multiple monitors), + // things will get the correct values as part of the first call to + // main.c: do_draw_all() in main.c: make_fullmaxscreen(). + // Probably all this stuff below should go there, something for a future version? + if(xscreen < 0) { P("fullscreen\n"); @@ -152,9 +165,9 @@ gtk_window_get_position (GTK_WINDOW(transwindow), &winx, &winy); P("winx winy: %d %d\n",winx,winy); } + P("gdkwin: %p %p\n",(void*)gdkwin,(void*)transwindow); gtk_widget_show_all(transwindow); - GdkWindow *gdkwin = gtk_widget_get_window(GTK_WIDGET(transwindow)); // so that apps like xsnow will ignore this window: if(dock) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/treesnow.c new/xsnow-3.9.10/src/treesnow.c --- old/xsnow-3.9.9/src/treesnow.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/treesnow.c 2026-10-04 09:25:26.000000000 +0200 @@ -74,7 +74,7 @@ int do_snow_on_trees(void *d) { P("do_snow_on_trees %d\n",counter++); - if (Flags.Done) + if (global.Done) return FALSE; if (NOTACTIVE) return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/ui.c new/xsnow-3.9.10/src/ui.c --- old/xsnow-3.9.9/src/ui.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/ui.c 2026-10-04 09:25:26.000000000 +0200 @@ -805,8 +805,8 @@ MODULE_EXPORT void button_quit() { - Flags.Done = 1; - P("button_quit: %d\n",Flags.Done); + letshalt(); + P("button_quit: %d\n",global.Done); } @@ -1158,7 +1158,8 @@ init_pixmaps(); set_buttons(); if(global.IsWayland) - gtk_widget_set_sensitive(Button.Screenshots,0); + if (!Flags.NoMenu) + gtk_widget_set_sensitive(Button.Screenshots,0); #ifndef SCREENSHOTS gtk_widget_hide(Button.Screenshots); #endif @@ -1186,7 +1187,8 @@ if (Nscreens < 2) { - gtk_widget_set_sensitive(GTK_WIDGET(ScreenButton),FALSE); + if (!Flags.NoMenu) + gtk_widget_set_sensitive(GTK_WIDGET(ScreenButton),FALSE); Flags.Screen = -1; } if (Flags.Screen < -1) @@ -1364,7 +1366,8 @@ // however, see transparency and below void ui_gray_erase(int m) { - gtk_widget_set_sensitive(Button.BelowAll, m); + if (!Flags.NoMenu) + gtk_widget_set_sensitive(Button.BelowAll, m); if(!Flags.BelowAllForce) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Button.BelowAll),1); } @@ -1374,13 +1377,16 @@ // m=1: make inactive void ui_gray_below(int m) { - gtk_widget_set_sensitive(Button.BelowAll, !m); + if (!Flags.NoMenu) + gtk_widget_set_sensitive(Button.BelowAll, !m); } // m=0: make active // m=1: make inactive void ui_gray_moonpos(int m) { + if(Flags.NoMenu) + return; GtkStyleContext *moonxlabelsc = gtk_widget_get_style_context(moonxlabel); GtkStyleContext *moonylabelsc = gtk_widget_get_style_context(moonylabel); if (m == 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/wind.c new/xsnow-3.9.10/src/wind.c --- old/xsnow-3.9.9/src/wind.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/wind.c 2026-10-04 09:25:26.000000000 +0200 @@ -73,7 +73,7 @@ int do_newwind(void *d) { P("newwind\n"); - if (Flags.Done) + if (global.Done) return FALSE; if (NOTACTIVE) return TRUE; @@ -113,7 +113,7 @@ int do_wind(void *d) { P("wind\n"); - if (Flags.Done) + if (global.Done) return FALSE; if (NOTACTIVE) return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/windows.c new/xsnow-3.9.10/src/windows.c --- old/xsnow-3.9.9/src/windows.c 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/windows.c 2026-10-04 09:25:26.000000000 +0200 @@ -280,7 +280,7 @@ if (GetWindows(&w, &n)<0) { I("Cannot get windows\n"); - Flags.Done = 1; + letshalt(); } lock_Windows(); Windows = (WinInfo *)realloc(Windows,sizeof(WinInfo)*n); @@ -302,7 +302,7 @@ int got_Windows_lock = 0; static long PrevWorkSpace = -123; P("do_wupdate #%d %d\n",global.counter++,global.WindowsChanged); - if (Flags.Done) + if (global.Done) return FALSE; if(Flags.NoKeepSWin) return TRUE; @@ -344,7 +344,7 @@ else { I("Cannot get current workspace\n"); - Flags.Done = 1; + letshalt(); goto end; } @@ -423,7 +423,7 @@ if (!global.Trans && !winfo) { I("No transparent window & no SnowWin %#lx found\n",global.SnowWin); - Flags.Done = 1; + letshalt(); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xsnow-3.9.9/src/xsnow.h new/xsnow-3.9.10/src/xsnow.h --- old/xsnow-3.9.9/src/xsnow.h 2026-10-04 09:25:26.000000000 +0200 +++ new/xsnow-3.9.10/src/xsnow.h 2026-10-04 09:25:26.000000000 +0200 @@ -37,6 +37,7 @@ #endif #ifdef NO_USE_BITS +// Just to practice bit fields, does very little with memory consumption or cpu time. #define BITS(n) #else #define BITS(n) :n @@ -199,12 +200,14 @@ int testing ; SnowMap *fluffpix; int counter; - unsigned int xxposures BITS(1); - unsigned int Desktop BITS(1); - unsigned int Trans BITS(1); - unsigned int UseDouble BITS(1); - unsigned int IsDouble BITS(1); - unsigned int UseClip BITS(1); + unsigned int xxposures BITS(1); + unsigned int Desktop BITS(1); + unsigned int Trans BITS(1); + unsigned int UseDouble BITS(1); + unsigned int IsDouble BITS(1); + unsigned int UseClip BITS(1); + unsigned int init_ready BITS(1); // to signal if initalization transparent window is ready + unsigned int Done BITS(1); // Signal to stop activities int XscreensaverMode; @@ -308,7 +311,9 @@ int time_to_write_flags; int tolxyw; // tolerance used by comparing position and width of windows char* FlagsFile; // default: $HOME/.xsnowrc - float Transparency; //transparency, after time_fadein copy of Flags.Transparency + float Transparency; // transparency, after time_fadein copy of Flags.Transparency } global; extern int set_sticky(int s); + +extern void letshalt(void);
