This is the mail archive of the insight@sources.redhat.com mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [RFA] globalpref fixes


On Fri, 2 Nov 2001, Martin M. Hunt wrote:

> Haven't seen approval for this yet.

Thanks for the reminder.

Please check this in.

Thanks!
Keith
> ----------  Forwarded Message  ----------
>
> Subject: [RFA] globalpref fixes
> Date: Thu, 18 Oct 2001 12:46:07 -0700
> From: "Martin M. Hunt" <hunt@redhat.com>
> To: Insight Mailing List <insight@sources.redhat.com>
>
> More preferences cleanup.
>
> - OK, APPLY, CANCEL work same as for srcprefs.
>
> - The font code that gets the initial list of fonts has been changed.  On my
> system it took 35 seconds and now takes less than 3.  Most of the problem was
> due to font metric queries taking up to several seconds on some troublesome
> fonts.  Selecting some of those fonts (like "song ti" on RH7.1) causes
> Insight to hang anyway. So I now have those fonts removed from the list.  I
> also sort the list.
>
> - All private variables and methods renamed to start with an underscore.
>
> --
> Martin Hunt
> GDB Engineer
> Red Hat, Inc.
>
> 2001-10-18  Martin M. Hunt  <hunt@redhat.com>
>
> 	* library/globalpref.itb (GlobalPref::_init_var):
> 	New method to initialize _saved and _new arrays.
> 	(GlobalPref::constructor): Call _init_var.
> 	(GlobalPref::_buildwin): Use _new array for prefs
> 	variables. Font optimizations. Remove troublesome
> 	fonts and sort the list.
> 	(GlobalPref::toggle_tracing_mode): Removed.  Some
> 	functionality moved to _apply and _cancel.
> 	(GlobalPref::_apply): Set prefs with values from the
> 	_new array.
> 	(SrcPref::_cancel): Reset prefs with values from _saved.
>
> 	* library/globalpref.ith: Changed private variables
> 	and methods to start with underscore.
> 	(tracing_cb): Removed.
> 	(_init): Changed from proc to method.
>
> Index: globalpref.ith
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/library/globalpref.ith,v
> retrieving revision 1.2
> diff -u -p -r1.2 globalpref.ith
> --- globalpref.ith	2001/08/16 18:55:50	1.2
> +++ globalpref.ith	2001/10/18 19:37:57
> @@ -16,31 +16,32 @@ class GlobalPref {
>    inherit ManagedWin ModalDialog
>
>    private {
> -    variable icondirlist ""
> -    variable Original	;# Original settings
> +    variable _new
> +    variable _saved
> +    variable _icondirlist ""
> +    variable _original	;# Original font settings
>      variable _size      ;# Array tracking spinint values
> -    variable Fonts	;# List of all available fonts for editing
> +    variable _fonts	;# List of all available fonts for editing
>      common tracing_labels
>      common inited 0
> -    variable tracing_cb
>
> -    proc _init {}
> -    method build_win {}
> -    method make_font_item {f name label font_list}
> -    method resize_font_item_height {}
> -    method change_icons {w args}
> +    method _init {}
> +    method _init_var {}
> +    method _build_win {}
> +    method _make_font_item {f name label font_list}
> +    method _resize_font_item_height {}
> +    method _change_icons {w args}
>      method _change_font {font stupid implementation}
>      method _change_size {direction font}
> -    method toggle_tracing_mode {}
> -    method ok {}
> -    method apply {{deleteMe 0}}
> +    method _ok {}
> +    method _apply {{deleteMe 0}}
> +    method _cancel {}
>      method cancel {}
> -    method toggle_tracing {win}
> +    method _toggle_tracing {win}
>    }
>
>    public {
>      method constructor {args}
>      method destructor {}
>    }
> -
>  }
> Index: globalpref.itb
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/library/globalpref.itb,v
> retrieving revision 1.5
> diff -u -p -r1.5 globalpref.itb
> --- globalpref.itb	2001/08/16 18:55:50	1.5
> +++ globalpref.itb	2001/10/18 19:37:57
> @@ -18,7 +18,7 @@
>  # ----------------------------------------------------------------------
>
>  # ------------------------------------------------------------------
> -#  PROC:  _init - set up the tracing labels info
> +#  METHOD:  _init - set up the tracing labels info
>  # ------------------------------------------------------------------
>  body GlobalPref::_init {} {
>    if {$inited} {
> @@ -41,12 +41,26 @@ body GlobalPref::_init {} {
>  }
>
>  # ------------------------------------------------------------------
> +#  METHOD:  init_var - initialize preference variables
> +# ------------------------------------------------------------------
> +body GlobalPref::_init_var {} {
> +  set vlist {gdb/ImageDir gdb/console/wrap gdb/mode
> +    gdb/help/browser gdb/use_icons}
> +
> +  foreach var $vlist {
> +    set _saved($var) [pref get $var]
> +    set _new($var) $_saved($var)
> +  }
> +}
> +
> +# ------------------------------------------------------------------
>  #  METHOD:  constructor - create the Global Preferences object
>  # ------------------------------------------------------------------
>  body GlobalPref::constructor {args} {
>    window_name "Global Preferences"
>    _init
> -  build_win
> +  _init_var
> +  _build_win
>    eval itk_initialize $args
>  }
>
> @@ -54,15 +68,15 @@ body GlobalPref::constructor {args} {
>  #  METHOD:  destructor - destroy the Global Preferences object
>  # ------------------------------------------------------------------
>  body GlobalPref::destructor {} {
> -  foreach thunk $Fonts {
> +  foreach thunk $_fonts {
>      font delete test-$thunk-font
>    }
>  }
>
>  # ------------------------------------------------------------------
> -#  METHOD:  build_win - build the dialog
> +#  METHOD:  _build_win - build the dialog
>  # ------------------------------------------------------------------
> -body GlobalPref::build_win {} {
> +body GlobalPref::_build_win {} {
>    global tcl_platform GDBTK_LIBRARY
>    debug
>    frame $itk_interior.f
> @@ -73,23 +87,22 @@ body GlobalPref::build_win {} {
>    frame $frame.icons
>    label $frame.icons.lab -text "Icons "
>    combobox::combobox $frame.icons.cb -editable 0 -maxheight 10\
> -    -command [code $this change_icons]
> +    -command [code $this _change_icons]
>
>    # get list of icon directories
>    set curdir [pwd]
> -  set icondirlist ""
> +  set _icondirlist ""
>    cd $GDBTK_LIBRARY
>    foreach foo [glob -- *] {
>      if {[file isdirectory $foo] && [file exists [file join $foo
> "icons.txt"]]} {
> -      lappend icondirlist $foo
> +      lappend _icondirlist $foo
>      }
>    }
>
>    set width 14
>    # load combobox
> -  set imagedir [pref get gdb/ImageDir]
> -  foreach dir $icondirlist {
> -    if {![string compare $dir $imagedir]} {
> +  foreach dir $_icondirlist {
> +    if {![string compare $dir $_saved(gdb/ImageDir)]} {
>        set cdir 1
>      } else {
>        set cdir 0
> @@ -121,6 +134,22 @@ body GlobalPref::build_win {} {
>    # to rescan the font list, without deleting the entry from the
>    # init file.
>    set font_cache [pref get gdb/font_cache]
> +
> +  # get list of fonts, removing some that typically
> +  # are not useful or cause tk problems
> +  set fam [lremove [font families] "open look glyph"]
> +  set fam [lremove $fam "open look cursor"]
> +  set fam [lremove $fam "song ti"]
> +  set fam [lremove $fam "clearlyu"]
> +  set fam [lremove $fam "clearlyu alternate glyphs"]
> +  set fam [lremove $fam "clearlyu arabic extra"]
> +  set fam [lremove $fam "clearlyu ligature"]
> +  set fam [lremove $fam "clearlyu pua"]
> +  set fam [lremove $fam "fangsong ti"]
> +  set fam [lremove $fam "newspaper"]
> +  set fam [lremove $fam "palatino linotype"]
> +  set fam [lsort $fam]
> +
>    if {$font_cache == ""} {
>      if {$tcl_platform(platform) == "unix"} {
>        toplevel .c
> @@ -135,40 +164,40 @@ body GlobalPref::build_win {} {
>
>        ::raise .c
>        ::update
>
>      }
> -    set fam [font families]
> +
>      foreach fn $fam {
>        if {[font metrics [list $fn] -fixed] == 1} {
>  	lappend font_cache $fn
>        }
>      }
>      pref set gdb/font_cache $font_cache
> -    if {$tcl_platform(platform) == "unix"} { destroy .c }
> +    if {[winfo exists .c]} { destroy .c }
>    }
>
>    Labelledframe $frame.d -text "Fonts"
>    set f [$frame.d get_frame]
>
> -  make_font_item $f fixed "Fixed Font:" $font_cache
> +  _make_font_item $f fixed "Fixed Font:" $font_cache
>
>    if {$tcl_platform(platform) != "windows"} {
>      # Cannot change the windows menu font ourselves
> -    make_font_item $f menu "Menu Font:" [font families]
> +    _make_font_item $f menu "Menu Font:" $fam
>    }
>
> -  make_font_item $f default "Default Font:" [font families]
> -  make_font_item $f status  "Status Bar Font:" [font families]
> +  _make_font_item $f default "Default Font:" $fam
> +  _make_font_item $f status  "Status Bar Font:" $fam
>
>    # This is the tracing preference
>    set tracing_cb [pref get gdb/mode]
>    if { ![info exists tracing_labels($tracing_cb)]} {
> -    debug "Got unknown mode value: $tracing_cb"
> +    dbug E "Got unknown mode value: $tracing_cb"
>      set tracing_labels($tracing_cb) "Unknown gdb mode..."
>    }
>
>    frame $frame.tracing
> -  checkbutton $frame.tracing.cb -variable [scope tracing_cb] \
> +  checkbutton $frame.tracing.cb -variable [scope _new(gdb/mode)] \
>      -text $tracing_labels($tracing_cb) \
> -    -command [code $this toggle_tracing $frame.tracing.cb] \
> +    -command [code $this _toggle_tracing $frame.tracing.cb] \
>      -width $tracing_labels(max_len) -anchor w
>      pack $frame.tracing.cb -pady 10 -side left -fill none
>
> @@ -180,21 +209,21 @@ body GlobalPref::build_win {} {
>    }
>    frame $frame.browser
>    checkbutton $frame.browser.cb  \
> -    -text $help_text -variable [pref varname gdb/help/browser]
> +    -text $help_text -variable [scope _new(gdb/help/browser)]
>    pack $frame.browser.cb -pady 10 -side left -fill none
>
>    # use_icons
>    if {$tcl_platform(platform) == "unix"} {
>      frame $frame.use_icons
>      checkbutton $frame.use_icons.cb  \
> -      -text "Use builtin image as icon." -variable [pref varname
> gdb/use_icons]
> +      -text "Use builtin image as icon." -variable [scope
> _new(gdb/use_icons)]
>      pack $frame.use_icons.cb -pady 10 -side left -fill none
>    }
>
>    # console wrap
>    frame $frame.consolewrap
>    checkbutton $frame.consolewrap.cw -text "wrap text in console window" \
> -    -variable [pref varname gdb/console/wrap]
> +    -variable [scope _new(gdb/console/wrap)]
>    pack $frame.consolewrap.cw -pady 10 -side left -fill none
>
>    pack $frame.icons.lab $frame.icons.cb -side left
> @@ -208,9 +237,9 @@ body GlobalPref::build_win {} {
>    pack $frame.d -side top -fill both -expand yes
>
>    # make buttons
> -  button $itk_interior.x.ok -text OK -underline 0 -width 7 -command [code
> $this ok]
> -  button $itk_interior.x.apply -text Apply -width 7 -underline 0 -command
> [code $this apply]
> -  button $itk_interior.x.cancel -text Cancel -width 7 -underline 0 -command
> [code $this cancel]
> +  button $itk_interior.x.ok -text OK -underline 0 -width 7 -command [code
> $this _ok]
> +  button $itk_interior.x.apply -text Apply -width 7 -underline 0 -command
> [code $this _apply]
> +  button $itk_interior.x.cancel -text Cancel -width 7 -underline 0 -command
> [code $this _cancel]
>    pack $itk_interior.x.ok $itk_interior.x.apply $itk_interior.x.cancel -side
> left
>    standard_button_box $itk_interior.x
>    pack $itk_interior.x -fill x -padx 5 -pady 5 -side bottom
> @@ -226,25 +255,25 @@ body GlobalPref::build_win {} {
>
>    ::update idletasks
>
> -  resize_font_item_height
> +  _resize_font_item_height
>    pack propagate $itk_interior.f 0
>
>  }
>  # ------------------------------------------------------------------
> -#  PRIVATE METHOD:  make_font_item
> +#  PRIVATE METHOD:  _make_font_item
>  # ------------------------------------------------------------------
> -body GlobalPref::make_font_item {f name label font_list} {
> +body GlobalPref::_make_font_item {f name label font_list} {
>
>    # create ComboBox with font name
> -  lappend Fonts $name
> +  lappend _fonts $name
>
> -  set Original($name,family) [font actual global/$name -family]
> -  set Original($name,size) [font actual global/$name -size]
> -  font create test-$name-font -family $Original($name,family) \
> -    -size $Original($name,size)
> +  set _original($name,family) [font actual global/$name -family]
> +  set _original($name,size) [font actual global/$name -size]
> +  font create test-$name-font -family $_original($name,family) \
> +    -size $_original($name,size)
>    label $f.${name}x -text $label
>
> -  combobox::combobox $f.${name}n -editable 0 -value $Original($name,family)
>  \ +  combobox::combobox $f.${name}n -editable 0 -value
>  $_original($name,family) \
>      -command [code $this _change_font $name]
>
>    foreach a $font_list {
> @@ -258,17 +287,17 @@ body GlobalPref::make_font_item {f name
>        -decrement [code $this _change_size down $name]
>    } {}
>    label $f.${name}l -text ABCDEFabcdef0123456789 -font test-$name-font
> -  set _size($name) $Original($name,size)
> +  set _size($name) $_original($name,size)
>
>    grid $f.${name}x $f.${name}n $f.${name}s $f.${name}l -sticky we -padx 5
> -pady 5
>    grid columnconfigure $f 3 -weight 1
>  }
>
>  # ------------------------------------------------------------------
> -#  PRIVATE METHOD:  resize_font_item_height
> +#  PRIVATE METHOD:  _resize_font_item_height
>  # ------------------------------------------------------------------
> -body GlobalPref::resize_font_item_height {} {
> -  foreach font $Fonts {
> +body GlobalPref::_resize_font_item_height {} {
> +  foreach font $_fonts {
>      set master [$itk_interior.f.d get_frame]
>      set row [gridCGet $master.${font}l -row]
>      grid rowconfigure $master $row -minsize [lindex [grid bbox $master 0
> $row 3 $row ] 3]
> @@ -276,16 +305,13 @@ body GlobalPref::resize_font_item_height
>  }
>
>  # ------------------------------------------------------------------
> -#  PRIVATE METHOD:  change_icons
> +#  PRIVATE METHOD:  _change_icons
>  # ------------------------------------------------------------------
> -body GlobalPref::change_icons {w args} {
> -  global gdb_ImageDir GDBTK_LIBRARY
> +body GlobalPref::_change_icons {w args} {
> +  debug
>    set index [$w list curselection]
>    if {$index != ""} {
> -    set dir [lindex $icondirlist $index]
> -    pref set gdb/ImageDir $dir
> -    set gdb_ImageDir [file join $GDBTK_LIBRARY $dir]
> -    ManagedWin::restart
> +    set _new(gdb/ImageDir) [lindex $_icondirlist $index]
>    }
>  }
>
> @@ -328,34 +354,25 @@ body GlobalPref::_change_size {direction
>    font configure test-$font-font -size $_size($font)
>  }
>
> -# ------------------------------------------------------------------
> -#  METHOD:  toggle_tracing_mode - toggles the tracing mode on and off
> -# ------------------------------------------------------------------
> -body GlobalPref::toggle_tracing_mode {} {
> -  pref set gdb/mode $tracing_cb
> -  # Reset the button-1 behavior if you are going out of trace mode.
> -  if {!$tracing_cb} {
> -    pref set gdb/B1_behavior 1
> -  }
> -}
>
> -body GlobalPref::toggle_tracing {win} {
> -  debug foo
> -  $win configure -text $tracing_labels($tracing_cb)
> +body GlobalPref::_toggle_tracing {win} {
> +  debug
> +  $win configure -text $tracing_labels($_new(gdb/mode))
>  }
>
>  # ------------------------------------------------------------------
> -#  METHOD:  ok - called to accept settings and close dialog
> +#  METHOD:  _ok - called to accept settings and close dialog
>  # ------------------------------------------------------------------
> -body GlobalPref::ok {} {
> -  apply 1
> +body GlobalPref::_ok {} {
> +  _apply 1
>  }
>
>  # ------------------------------------------------------------------
> -#  METHOD:  apply - apply current settings to the screen
> +#  METHOD:  _apply - apply current settings to the screen
>  # ------------------------------------------------------------------
> -body GlobalPref::apply {{deleteMe 0}} {
> -  set commands {}
> +body GlobalPref::_apply {{deleteMe 0}} {
> +  debug
> +  set changed_something 0
>
>    # If you are not destroying the window, then make sure to
>    # propagate the geometry info from the font frame, so that changing
> @@ -366,61 +383,90 @@ body GlobalPref::apply {{deleteMe 0}} {
>      pack propagate $itk_interior.f 1
>    }
>
> -  foreach thunk $Fonts {
> +  foreach thunk $_fonts {
>      set font [font configure test-$thunk-font]
>      if {[pref get global/font/$thunk] != $font} {
> -      lappend commands [list pref set global/font/$thunk $font]
> +      pref set global/font/$thunk $font
> +      set changed_something 1
>      }
>    }
>
> -  if {[pref get gdb/mode] != $tracing_cb} {
> -    lappend commands toggle_tracing_mode
> +  foreach var [array names _new] {
> +    if {$_new($var) != [pref get $var]} {
> +      debug "$var = $_new($var)"
> +
> +      if {$var == "gdb/mode"} {
> +	if {!$_new(gdb/mode)} { pref set gdb/B1_behavior 1 }
> +      } elseif {$var == "gdb/ImageDir"} {
> +	set ::gdb_ImageDir [file join $::GDBTK_LIBRARY $_new($var)]
> +      }
> +      pref set $var $_new($var)
> +      set changed_something 1
> +    }
>    }
>
> -  if {[llength $commands] > 0} {
> -    foreach command $commands {
> -      eval $command
> -    }
> -    if {$deleteMe} {
> -      unpost
> -    }
> +  if {$changed_something} {
> +    if {$deleteMe} { unpost }
>      ManagedWin::restart
>      return
>    }
> -  if {$deleteMe} {
> -    unpost
> +  if {$deleteMe} {
> +    unpost
>    } else {
>      after idle "
>        update idletasks
> -      [code $this resize_font_item_height]
> +      [code $this _resize_font_item_height]
>        pack propagate $itk_interior.f 0
>      "
>    }
>  }
>
>  # ------------------------------------------------------------------
> -#  METHOD:  cancel - forget current settings -- reset to original
> +#  METHOD:  _cancel - forget current settings -- reset to original
>  #                    state and close preferences
>  # ------------------------------------------------------------------
> -body GlobalPref::cancel {} {
> +body GlobalPref::_cancel {} {
> +  debug
> +  set changed_something 0
> +
>    # Reset fonts if different
> -  set commands {}
> -  foreach thunk $Fonts {
> +  foreach thunk $_fonts {
>      set family [font configure global/$thunk -family]
>      set size   [font configure global/$thunk -size]
> -    if {$Original($thunk,family) != $family || $Original($thunk,size) !=
> $size} {
> -      lappend commands [list pref set global/font/$thunk \
> -	[list -family $Original($thunk,family) -size $Original($thunk,size)]]
> +    if {$_original($thunk,family) != $family || $_original($thunk,size) !=
> $size} {
> +      pref set global/font/$thunk \
> +	[list -family $_original($thunk,family) -size $_original($thunk,size)]
> +      set changed_something 1
>      }
>    }
>
> -  if {[llength $commands] > 0} {
> -    foreach command $commands {
> -      eval $command
> +  foreach var [array names _saved] {
> +    if {$_saved($var) != [pref get $var]} {
> +      debug "$var = $_saved($var)"
> +
> +      if {$var == "gdb/mode"} {
> +	if {!$_saved(gdb/mode)} { pref set gdb/B1_behavior 1 }
> +      } elseif {$var == "gdb/ImageDir"} {
> +	set ::gdb_ImageDir [file join $::GDBTK_LIBRARY $_saved($var)]
> +      }
> +      pref set $var $_saved($var)
> +      set changed_something 1
>      }
>    }
> -  if {[llength $commands] > 0} {
> +
> +  if {$changed_something} {
>      ManagedWin::restart
>    }
>    unpost
> +}
> +
> +# ------------------------------------------------------------------
> +#  METHOD:  cancel - override modal dialog cancel method.
> +#                    The cancel method is actually called when
> +#		     the window is closed. Name needs fixed.
> +# ------------------------------------------------------------------
> +body GlobalPref::cancel {} {
> +  # when the window is closed, we want the preferences selected to
> +  # be applied.
> +  _apply 1
>  }
>
> -------------------------------------------------------
>
> --
> Martin Hunt
> GDB Engineer
> Red Hat, Inc.
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]