From 953c9fd4d4f762d9898ab40820748b991244f859 Mon Sep 17 00:00:00 2001 From: anthony Date: Wed, 28 Apr 2021 21:32:32 +0100 Subject: [PATCH] Implement 'load images' preference --- frontends/gnustep/AppDelegate.m | 12 +++-- frontends/gnustep/Preferences.h | 13 +++++ frontends/gnustep/Preferences.m | 50 +++++++++++++++++- .../gnustep/PreferencesWindowController.m | 27 ++++++---- .../gnustep/res/Preferences.gorm/objects.gorm | Bin 26721 -> 26796 bytes 5 files changed, 87 insertions(+), 15 deletions(-) diff --git a/frontends/gnustep/AppDelegate.m b/frontends/gnustep/AppDelegate.m index a06995e32..d909c8aa1 100644 --- a/frontends/gnustep/AppDelegate.m +++ b/frontends/gnustep/AppDelegate.m @@ -281,9 +281,15 @@ int main(int argc, char **argv) { /* common initialisation */ error = nsoption_init(set_defaults, &nsoptions, &nsoptions_default); - NSCAssert(error == NSERROR_OK, @"Options failed to initialise"); - error = netsurf_init(NULL); - NSCAssert(error == NSERROR_OK, @"NetSurf failed to initialise"); + NSCAssert(error == NSERROR_OK, @"Options failed to initialise"); + error = netsurf_init(NULL); + NSCAssert(error == NSERROR_OK, @"NetSurf failed to initialise"); + + /* Load user options */ + error = nsoption_read([NS_PREFS_FILE cString], nsoptions); + if (error != NSERROR_OK) { + NSLog(@"Failed to load user preferences"); + } NSApplication *app = [NSApplication sharedApplication]; AppDelegate *delegate = [AppDelegate new]; diff --git a/frontends/gnustep/Preferences.h b/frontends/gnustep/Preferences.h index ed13f63c4..65739c729 100644 --- a/frontends/gnustep/Preferences.h +++ b/frontends/gnustep/Preferences.h @@ -1,6 +1,9 @@ #import #import "SearchProvider.h" +#define NS_PREFS_DIR ([@"~/.config/NetSurf/" stringByExpandingTildeInPath]) +#define NS_PREFS_FILE ([@"~/.config/NetSurf/prefs" stringByExpandingTildeInPath]) + typedef NS_ENUM(NSInteger, ViewLocation) { ViewLocationWindow = 0, ViewLocationTab, @@ -20,6 +23,13 @@ typedef NS_ENUM(NSInteger, UrlBarButtonType) { UrlBarButtonTypeImage }; +typedef NS_ENUM(NSInteger, LoadImages) { + LoadImagesAll = 0, + LoadImagesForeground, + LoadImagesBackground, + LoadImagesNone +}; + // Certain preferences will notify that they have been updated using this key. #define PreferencesUpdatedNotificationName @"PreferencesUpdatedNotification" typedef NS_ENUM(NSInteger, PreferenceType) { @@ -72,5 +82,8 @@ typedef NS_ENUM(NSInteger, PreferenceType) { -(UrlBarButtonType)urlBarButtonType; -(void)setUrlBarButtonType: (UrlBarButtonType)buttonType; +-(LoadImages)loadImages; +-(void)setLoadImages: (LoadImages)loadImages; + +(Preferences*)defaultPreferences; @end diff --git a/frontends/gnustep/Preferences.m b/frontends/gnustep/Preferences.m index 4fab4818e..dcc29eb71 100644 --- a/frontends/gnustep/Preferences.m +++ b/frontends/gnustep/Preferences.m @@ -1,4 +1,6 @@ #import +#import +#import "utils/nsoption.h" #import "SearchProvider.h" #import "Preferences.h" @@ -16,10 +18,11 @@ #define KEY_SHOW_URL_SUGGESTIONS @"show_url_suggestions" #define KEY_URL_BAR_BUTTON_TYPE @"url_bar_button_type" + @interface Preferences (Private) -(void)notifyPreferenceUpdated: (PreferenceType)type; - +-(void)saveNetsurfPrefsFile; @end @implementation Preferences @@ -202,6 +205,43 @@ [self notifyPreferenceUpdated: PreferenceTypeUrlBarButtonType]; } +-(LoadImages)loadImages { + bool loadForeground = nsoption_bool(foreground_images); + bool loadBackground = nsoption_bool(background_images); + if (loadForeground && loadBackground) { + return LoadImagesAll; + } else if (loadForeground) { + return LoadImagesForeground; + } else if (loadBackground) { + return LoadImagesBackground; + } else { + NSLog(@"none"); + return LoadImagesNone; + } +} + +-(void)setLoadImages: (LoadImages)loadImages { + switch (loadImages) { + case LoadImagesAll: + nsoption_set_bool(foreground_images, true); + nsoption_set_bool(background_images, true); + break; + case LoadImagesForeground: + nsoption_set_bool(foreground_images, true); + nsoption_set_bool(background_images, false); + break; + case LoadImagesBackground: + nsoption_set_bool(foreground_images, false); + nsoption_set_bool(background_images, true); + break; + default: + nsoption_set_bool(foreground_images, false); + nsoption_set_bool(background_images, false); + break; + } + [self saveNetsurfPrefsFile]; +} + +(Preferences*)defaultPreferences { static Preferences *prefs; if (prefs == nil) { @@ -218,4 +258,12 @@ [[NSNotificationCenter defaultCenter] postNotificationName: PreferencesUpdatedNotificationName object: dict]; } + +-(void)saveNetsurfPrefsFile { + [[NSFileManager defaultManager] createDirectoryAtPath: NS_PREFS_DIR + attributes: nil]; + if (nsoption_write([NS_PREFS_FILE cString], NULL, NULL) != NSERROR_OK) { + NSLog(@"Failed to write prefs to file %@", NS_PREFS_FILE); + } +} @end diff --git a/frontends/gnustep/PreferencesWindowController.m b/frontends/gnustep/PreferencesWindowController.m index 5398e4e22..14165e5fd 100644 --- a/frontends/gnustep/PreferencesWindowController.m +++ b/frontends/gnustep/PreferencesWindowController.m @@ -60,6 +60,7 @@ -(void)awakeFromNib { [self configureMainTab]; [self configureAppearanceTab]; + [self configureContentTab]; } // MARK: - MAIN TAB @@ -261,47 +262,51 @@ // MARK: - CONTENT TAB -(void)configureContentTab { - + LoadImages loadImages = [[Preferences defaultPreferences] loadImages]; + [displayImagesButton selectItemAtIndex: (NSInteger)loadImages]; } -(void)didChangeFontSizeStepper: (id)sender { - + NSLog(@"didChangeFontSizeStepper"); } -(void)didEnterFontSize: (id)sender { - + NSLog(@"didEnterFontSize"); } -(void)didPickDefaultFont: (id)sender { - + NSLog(@"didPickDefualtFont"); } -(void)didPickLoadImages: (id)sender { - + NSLog(@"didPickLoadImages"); + LoadImages loadImages = (LoadImages)[sender indexOfItem: [sender + selectedItem]]; + [[Preferences defaultPreferences] setLoadImages: loadImages]; } -(void)didPressEnableAnimations: (id)sender { - + NSLog(@"didPressEnableAnimations"); } -(void)didPressEnableJavascript: (id)sender { - + NSLog(@"didPressEnableJavascript"); } -(void)didPressHideAdverts: (id)sender { - + NSLog(@"didPressHideAdverts"); } -(void)didPressPreventPopups: (id)sender { - + NSLog(@"didPressPreventPopups"); } -(void)didPressPreviewFont: (id)sender { - + NSLog(@"didPressPreviewFont"); } -(void)didPickPreferredLanguage: (id)sender { - + NSLog(@"didPickPreferredLanguage"); } @end diff --git a/frontends/gnustep/res/Preferences.gorm/objects.gorm b/frontends/gnustep/res/Preferences.gorm/objects.gorm index 54f7d39a04f253cd91d3a515b2f34e22991021fc..c061503343ec6dd17c7b6f59431c8f4c4908c7b3 100644 GIT binary patch delta 2898 zcmYL~cU)Fg9L71<49kNf)C99MeVLMoB5puXb00%xDC1S$_Z3AW1Xt=SYLSYD9?g*} z&4G}Bv%U9xZ4XPWY-pD4W!dxGb3geHpYQX1&gK5@J@Oe<3rjtONftd$X8;wPEPBrlQTkeWLoRsgy@DBl-Q#yMt9Ve858uB zVWGi^(G9ODQKK&p?hu?5-SE2-2kbs^{G29A)axE2I{B-WXlQf=#E^i<1viqrBZ3c+ z2O)wFlM@iZN66ibKT3WO5&jr?tMSLl)rjy9lPisXguDO|{!y@Bl$hc%7E=PE1jXaz zNya}x9*GG5B>6tf0e*_S5)u3~*>C(a(2Jwe9`l1%_V8C|)Gb zF&Df<-h&ALGI^ZwuaIv=gnyNsZ~SZIwTSSqlLr|82DvvP{F~(E#=k}G(X<*mpyMY- zh!gshyQ^QkO+Nw4P`pE~Gwa_a??Z%tk38J?_sMr6!hb+cGX6vIR7CiX$Xks6n5+@u zKOq+zf0Fz_E6($2V+1fDl9l+3L$wg6SSDjF+S7VK=1sx%c$G?=(Ni+J%Fi1k0|H{X z5?|WgaE|y|V7IuFL5XVg)%5oU1IMPv(UC zExzNsaGI)>)r7nd5quSSzwu4UqY>e+Ca*U>nA{H$z8QIu@z;@=Rt2oCV^v^Rp{)FESjFK6DBF@pa9KOj zOmolc$zDYG_T)_C!^mS0;ls&GjqgCd0}=iPa;oti$$j|WZ{!et0%AK};Z62{o!Hf| z>&&jk?ryfLF03}N>dI<^UAgSpBUo+64Nyjsr<*%Pk+TuuqsczwW5^p3;bX}e#&;v9 zA;QOz2O571xhEogcXGV(@#MwTEunjGro{oVLRks+xINj8<+#0AjkT*pR_%MUT7mz9 zGRgUh_A9H8?v)oK`#NI1vij-ic@eU|BNi!ZfZm$tk^>zvQCWlZ8xYBkNL5yf{x>g5 zraHo>tid`VKT4)KB3@bP+M6FMhj1o*ll96Pin9+O1x@FrE3ae- z7`%b;cSN@VVrjfe!YK z^BDSbgnZ7|KOjn#RbX$Pn^i5VDXePkYN}lovf9kb!)mi#d0F{=tV(eMl+(z|xU7hD zkC|mUc^)GC4Dw#%i^*At@H5G`8$XNeMufkeoMU_mc@!f29pqK;VF;xRGkDwCoNh)y zOjcHzJ$N~*@vP>s8gEx~?P?yY6jt+DrP$R1`x{pPJQ%TBWmtDJ+-r(Tas?tTxQ9I7_!Z93tabWGp-XB< zBr0pYK3f^crs)xrY)51ahxF z=#7&5C~z_$_UqBUPGKY5bKJA1mKK$i^;1?2+nsiMKzHy($XbfMwy4AMIQb9-zA9XQ z5DyrpclcV!dP;06WP^Uh=aP*S*iDE-`W!AhOo45LID$FC^}uN@Qjbz%OCXP#-`KGK ne`CX}!lFV|G{s{rJll3?peNa``6z(-q?k|$U*-B!+}{3 delta 2840 zcmYM0cXSk09EI}+VxoBjFc3*lshdh9L}D;eT0$>*B!PsGvMak;N;)SH+o-2qcNjU~(G~nRnTV zu&BJU6NmeY=f~;9-1eQ&7DV_*8X0Dp;!*Mqh$tQ-Pcr@}c@!f2G4h?51N=C7 zIU@Kt8JnR$L9RmtKS7>i{FCGgMEIx3tFVR_Jk8J-8T<^n!Cdexc_$+LbL4TxKTjTx z2!E1XY5WW1wTSSi$k!SFBKaCb_?O6c82@t66&VtJ0?@B$H6cNS^m$LuM)4}wjK?w* zuaOU!^{B|hL#(c(jv1F#nDN4l)ION1AXQi+fC!s4FtOfV5|5=K_y6Md*SNq*{xY9&6? zXNyzh=Z?U;c~)Ouk|@7$M3xd?>im)n`IRF^DDgE!yxv{XNq)mYaDZMVzSXBnlH_+3 zI5~*#^?6)&jshnJ@dHH9_&i^gr@p#QdHlX?C4OX$2afuuCQqDRH?h6^nGTzV`$Y#Q z_L9F+;Aukqrc+A0>!{Kg`8y>ZCFCEFnetBxoHfK>`dDSWUQ`;>_is*JZp(jy5eZ>o zVUaHU6W)bOT z6?w1mt;u5$;ls)6jK7GSjR+q>o@;z0c^@MD#pDUbUqW7qqqd^BtCb;<)=F6tXYGn@ z!)`XaXm+#FDXXnrwPWRG)t;5xt}bQO7{e+JH$d5eJd(>gl4h8D#*(WL;V&Z>8{dgM z77;#3l_jpU2kgRb54*1H_SjuFyXwwrJ*yt9 z*4tH2dv+JA&A0)|1oAXc?;kXWXyKK8g7?D9G8)vWUEsxPZfnXH!KS5RK#yhVGJm8FX+Qe;0z ztW(ytdU-{H%yz_FW##Cj6)t(5BPJ;8di@mwsj!0Kl zu3lW3D)TrK-bt^rhTvOBlS3)+GC~Z~sqT2)&fQiHr^K5GIRY|Sj-3_s5U?)Gvl9iB8?zCP(rm5Kt73}Rf9C#A7~`%lGR7wo@~yaN$jL{`R+C(lQO zpFkdFd@*@3B76xs)A)(xnTYVE<>TKV*oFRuJRB*hUkf>2srG0d6 zR{L3bSnao~8|-Q_tBtI@tTx(}k5yw8s~X$@rJsB|mrWrpHM2}5&q0KrM&4!obaDwI zd^Pz-<7bdPi10JXrN-Y#9*qb;i@X9p4&f$->AY=t>mk?>^9OC(p*xWnQ9*ST10sJ{{_v)&!^uI63y@n z$oCq*kX(QWe>=I!_&dmh5d*5wTEwu%6pP6V5OKj0^3BFCB~L|!Uq-GsemS|8W3J%7 zYC~eEvQ~0momR0Lij^o=JKu&<)*8LdnOMiL_v%`>uW3Txp39JT2%Frn;lW9 ztSvgd$|bitqF!0sw5KXnZs%_Bnc#EU(d3EM_g8h0&2;!g;CAYltCHj{3Va(7yY&oz z*SL|M22btenyItuvX!-m?N+