Greetings. It has been brought to my attention that a file from the dogtail package conflicts with another totally unrelated package. The usr/bin/sniff file also exists in the ksniffer package, which is a network sniffing application for KDE. In Ubuntu, I have renamed the sniff command to dogtail-sniff, in version 0.6.1 of the package, but I am wondering if you would consider renaming this in your official releases? Doing so would ultimately make work easier for those of us who maintain the packages in distributions, as we don't need to keep on making new patches for every new release. Patches are attached. Thanks for your time. -- Luke Yelavich GPG key: 0xD06320CE (http://www.themuso.com/themuso-gpg-key.txt) Email & MSN: themuso themuso com Jabber: themuso jabber org au
diff -Nur dogtail-0.6.1/sniff/dogtail-sniff dogtail-0.6.1.new/sniff/dogtail-sniff --- dogtail-0.6.1/sniff/dogtail-sniff 1970-01-01 10:00:00.000000000 +1000 +++ dogtail-0.6.1.new/sniff/dogtail-sniff 2006-09-27 07:17:19.000000000 +1000 @@ -0,0 +1,406 @@ +#!/usr/bin/env python +# -*- coding: UTF8 -*- + +appName = 'Sniff' +appAuthors = ['Zack Cerza <zcerza redhat com>', 'David Malcolm <dmalcolm redhat com'] + +from dogtail.utils import checkForA11yInteractively +checkForA11yInteractively() + +from dogtail import tree +from dogtail import utils +import gobject +import gnome +import atspi +program = gnome.program_init(appName, '0.1') +import gtk.glade + +import os +if os.path.exists('sniff.glade'): + x = gtk.glade.XML('sniff.glade') +else: + import sys + exec_root = sys.argv[0].split("/bin/")[0] + if exec_root[0] is not '/': + exec_root = "/usr" + x = gtk.glade.XML(exec_root + '/share/dogtail/glade/sniff.glade') + +sniff = x.get_widget(appName) + +try: + sniff.set_icon_from_file('../icons/dogtail-head.svg') +except: + sniff.set_icon_from_file('/usr/share/icons/hicolor/scalable/apps/dogtail-head.svg') + +view = x.get_widget('treeTreeView') + +nameTextLabel = x.get_widget('nameTextLabel') +roleNameTextLabel = x.get_widget('roleNameTextLabel') +descTextLabel = x.get_widget('descTextLabel') +actionsTextLabel = x.get_widget('actionsTextLabel') +textLabel = x.get_widget('textLabel') +textTextView = x.get_widget('textTextView') + +# Indices of the various fields of the tree model: +MODEL_FIELD_NODE = 0 +MODEL_FIELD_NAME = 1 +MODEL_FIELD_ROLENAME = 2 +MODEL_FIELD_DESCRIPTION = 3 +MODEL_FIELD_PIXBUF = 4 + +def quit(*args): + gtk.main_quit() + +def expandAll(widget, *args): + global view + if args[0] == True: view.expand_all() + elif args[0] == False: view.collapse_all() + +def showAbout(*args): + about = gtk.AboutDialog() + about.set_name(appName) + about.set_authors(appAuthors) + about.set_comments('Explore your desktop with Dogtail') + about.set_website('http://people.redhat.com/zcerza/dogtail/') + about.show_all() + +def connectSignals(): + sniff.connect('delete_event', quit) + + quit1 = x.get_widget('quit1') + quit1.connect('activate', quit) + + expand_all1 = x.get_widget('expand_all1') + expand_all1.connect('activate', expandAll, True) + collapse_all1 = x.get_widget('collapse_all1') + collapse_all1.connect('activate', expandAll, False) + + about1 = x.get_widget('about1') + about1.connect('activate', showAbout) + + refreshMenuItem = x.get_widget('refresh1') + refreshMenuItem.connect('activate', refreshAll) + + view.connect('button-press-event', buttonPress) + view.connect('row-expanded', rowExpanded) + view.connect('row-collapsed', rowCollapsed) + treeSelection = view.get_selection() + treeSelection.connect('changed', selectionChanged) + +def buttonPress(widget, event, *userParams): + global model + try: path, treeViewCol, relX, relY = \ + view.get_path_at_pos(int(event.x), int(event.y)) + except TypeError: return + node = model[path][0] + setUpTable(node) + + if event.button == 3: + menu = gtk.Menu() + menuItem = None + if node.actions: + for action in node.actions.values(): + menuItem = gtk.MenuItem(action.name.capitalize()) + menuItem.connect('activate', menuItemActivate, action.do) + menuItem.show() + menu.append(menuItem) + if not menuItem: return + menu.show() + menu.popup(None, None, None, event.button, event.time) + +# I hate globals too. I think we need one here, though. +# Make it a non-integer, so we can know if it has been set yet (later). +textTextViewBufferChangedLastHandlerID = 3.141592654 + +def setUpTable(node): + """Generic code for setting up the table under the TreeView""" + nameTextLabel.set_text(node.name) + roleNameTextLabel.set_text(node.roleName) + descTextLabel.set_text(node.description) + if node.actions: + str = '' + for action in node.actions.values(): str = ' '.join([str, action.name]).strip() + actionsTextLabel.set_text(str) + + global textTextViewBufferChangedLastHandlerID + # Have we connected this signal yet? If so, disconnect it before proceeding. + if int(textTextViewBufferChangedLastHandlerID) == \ + textTextViewBufferChangedLastHandlerID: + textTextView.get_buffer().disconnect(textTextViewBufferChangedLastHandlerID) + + if node.text is not None: + buffer = textTextView.get_buffer() + buffer.set_text(node.text) + # Eeew! I'm touching tree's privates. + if node._Node__editableText: + # Remember the handler ID of this connection. + textTextView.set_sensitive(True) + textTextViewBufferChangedLastHandlerID = \ + buffer.connect('changed', changeText, node) + else: + textTextView.set_sensitive(False) + else: + textTextView.get_buffer().set_text('') + textTextView.set_sensitive(False) + +def changeText(textBuffer, node): + node.text = textBuffer.get_text(textBuffer.get_start_iter(), \ + textBuffer.get_end_iter()) + +def rowExpanded(treeview, iter, path, *userParams): + global model + row = model[path] + childRows = row.iterchildren() + node = row[0] + childNodes = node.children + for childNode in childNodes: + childRow = childRows.next() + addChildren(childNode, childRow.iter) + +def rowCollapsed(treeview, iter, path, *userParams): + global model + row = model[path] + childRows = row.iterchildren() + try: + while True: + childRow = childRows.next() + grandChildRows = childRow.iterchildren() + try: + while True: + grandChildRow = grandChildRows.next() + model.remove(grandChildRow.iter) + except StopIteration: pass + except StopIteration: pass + +def selectionChanged(treeSelection): + # print "selection changed" + node = getSelectedNode() + if node: node.blink() + +def getSelectedNode(): + global model + global view + (store, iter) = view.get_selection().get_selected() + if not iter: node = None + else: node = model[iter][0] + return node + +def menuItemActivate(menuItem, *userParams): + method = userParams[0] + if method: method() + +def refreshAll(menuItem, *userParams): + global model + resetModel() + +def addNodeToModel(node, parentInTreeView = None): + global model + iter = model.insert_before(parentInTreeView, None) + model.set_value(iter, MODEL_FIELD_NODE, node) + return iter + +def addChildren(node, parentInTreeView = None): + global model + for child in node.children: + iter = addNodeToModel(child, parentInTreeView) + +def showNode(node, parentInTreeView = None): + global model + iter = addNodeToModel(node, parentInTreeView) + addChildren(node, iter) + +def resetModel(): + global model + model.clear() + showNode(tree.root) + rootPath = model.get_path(model.get_iter_root()) + view.expand_row(rootPath, False) + +def loadIcon(iconName): + try: + pixbuf = gtk.gdk.pixbuf_new_from_file('icons/' + iconName) + except gobject.GError: + iconName = '/usr/share/dogtail/icons/' + iconName + pixbuf = gtk.gdk.pixbuf_new_from_file(iconName) + return pixbuf + +button_xpm = loadIcon("button.xpm") +checkbutton_xpm = loadIcon("checkbutton.xpm") +checkmenuitem_xpm = loadIcon("checkmenuitem.xpm") +colorselection_xpm = loadIcon("colorselection.xpm") +combo_xpm = loadIcon("combo.xpm") +dialog_xpm = loadIcon("dialog.xpm") +image_xpm = loadIcon("image.xpm") +label_xpm = loadIcon("label.xpm") +menubar_xpm = loadIcon("menubar.xpm") +menuitem_xpm = loadIcon("menuitem.xpm") +notebook_xpm = loadIcon("notebook.xpm") +scrolledwindow_xpm = loadIcon("scrolledwindow.xpm") +spinbutton_xpm = loadIcon("spinbutton.xpm") +statusbar_xpm = loadIcon("statusbar.xpm") +table_xpm = loadIcon("table.xpm") +text_xpm = loadIcon("text.xpm") +toolbar_xpm = loadIcon("toolbar.xpm") +tree_xpm = loadIcon("tree.xpm") +treeitem_xpm = loadIcon("treeitem.xpm") +unknown_xpm = loadIcon("unknown.xpm") +viewport_xpm = loadIcon("viewport.xpm") +vscrollbar_xpm = loadIcon("vscrollbar.xpm") +vseparator_xpm = loadIcon("vseparator.xpm") +window_xpm = loadIcon("window.xpm") + +iconForRole = { \ + atspi.SPI_ROLE_INVALID : None, \ + atspi.SPI_ROLE_ACCEL_LABEL : label_xpm, \ + atspi.SPI_ROLE_ALERT : None, \ + atspi.SPI_ROLE_ANIMATION : None, \ + atspi.SPI_ROLE_ARROW : None, \ + atspi.SPI_ROLE_CALENDAR : None, \ + atspi.SPI_ROLE_CANVAS : None, \ + atspi.SPI_ROLE_CHECK_BOX : checkbutton_xpm, \ + atspi.SPI_ROLE_CHECK_MENU_ITEM : checkmenuitem_xpm, \ + atspi.SPI_ROLE_COLOR_CHOOSER : colorselection_xpm, \ + atspi.SPI_ROLE_COLUMN_HEADER : None, \ + atspi.SPI_ROLE_COMBO_BOX : combo_xpm, \ + atspi.SPI_ROLE_DATE_EDITOR : None, \ + atspi.SPI_ROLE_DESKTOP_ICON : None, \ + atspi.SPI_ROLE_DESKTOP_FRAME : None, \ + atspi.SPI_ROLE_DIAL : None, \ + atspi.SPI_ROLE_DIALOG : dialog_xpm, \ + atspi.SPI_ROLE_DIRECTORY_PANE : None, \ + atspi.SPI_ROLE_DRAWING_AREA : None, \ + atspi.SPI_ROLE_FILE_CHOOSER : None, \ + atspi.SPI_ROLE_FILLER : None, \ + atspi.SPI_ROLE_FONT_CHOOSER : None, \ + atspi.SPI_ROLE_FRAME : window_xpm, \ + atspi.SPI_ROLE_GLASS_PANE : None, \ + atspi.SPI_ROLE_HTML_CONTAINER : None, \ + atspi.SPI_ROLE_ICON : image_xpm, \ + atspi.SPI_ROLE_IMAGE : image_xpm, \ + atspi.SPI_ROLE_INTERNAL_FRAME : None, \ + atspi.SPI_ROLE_LABEL : label_xpm, \ + atspi.SPI_ROLE_LAYERED_PANE : viewport_xpm, \ + atspi.SPI_ROLE_LIST : None, \ + atspi.SPI_ROLE_LIST_ITEM : None, \ + atspi.SPI_ROLE_MENU : menuitem_xpm, \ + atspi.SPI_ROLE_MENU_BAR : menubar_xpm, \ + atspi.SPI_ROLE_MENU_ITEM : menuitem_xpm, \ + atspi.SPI_ROLE_OPTION_PANE : None, \ + atspi.SPI_ROLE_PAGE_TAB : notebook_xpm, \ + atspi.SPI_ROLE_PAGE_TAB_LIST : notebook_xpm, \ + atspi.SPI_ROLE_PANEL : viewport_xpm, \ + atspi.SPI_ROLE_PASSWORD_TEXT : None, \ + atspi.SPI_ROLE_POPUP_MENU : None, \ + atspi.SPI_ROLE_PROGRESS_BAR : None, \ + atspi.SPI_ROLE_PUSH_BUTTON : button_xpm, \ + atspi.SPI_ROLE_RADIO_BUTTON : None, \ + atspi.SPI_ROLE_RADIO_MENU_ITEM : None, \ + atspi.SPI_ROLE_ROOT_PANE : viewport_xpm, \ + atspi.SPI_ROLE_ROW_HEADER : None, \ + atspi.SPI_ROLE_SCROLL_BAR : vscrollbar_xpm, \ + atspi.SPI_ROLE_SCROLL_PANE : scrolledwindow_xpm, \ + atspi.SPI_ROLE_SEPARATOR : vseparator_xpm, \ + atspi.SPI_ROLE_SLIDER : None, \ + atspi.SPI_ROLE_SPIN_BUTTON : spinbutton_xpm, \ + atspi.SPI_ROLE_SPLIT_PANE : None, \ + atspi.SPI_ROLE_STATUS_BAR : statusbar_xpm, \ + atspi.SPI_ROLE_TABLE : table_xpm, \ + atspi.SPI_ROLE_TABLE_CELL : treeitem_xpm, \ + atspi.SPI_ROLE_TABLE_COLUMN_HEADER : None, \ + atspi.SPI_ROLE_TABLE_ROW_HEADER : None, \ + atspi.SPI_ROLE_TEAROFF_MENU_ITEM : None, \ + atspi.SPI_ROLE_TERMINAL : None, \ + atspi.SPI_ROLE_TEXT : text_xpm, \ + atspi.SPI_ROLE_TOGGLE_BUTTON : None, \ + atspi.SPI_ROLE_TOOL_BAR : toolbar_xpm, \ + atspi.SPI_ROLE_TOOL_TIP : None, \ + atspi.SPI_ROLE_TREE : tree_xpm, \ + atspi.SPI_ROLE_TREE_TABLE : tree_xpm, \ + atspi.SPI_ROLE_UNKNOWN : unknown_xpm, \ + atspi.SPI_ROLE_VIEWPORT : viewport_xpm, \ + atspi.SPI_ROLE_WINDOW : window_xpm, \ + atspi.SPI_ROLE_EXTENDED : None, \ + atspi.SPI_ROLE_HEADER : None, \ + atspi.SPI_ROLE_FOOTER : None, \ + atspi.SPI_ROLE_PARAGRAPH : None, \ + atspi.SPI_ROLE_RULER : None, \ + atspi.SPI_ROLE_APPLICATION : None, \ + atspi.SPI_ROLE_AUTOCOMPLETE : None, \ + atspi.SPI_ROLE_EDITBAR : None, \ + atspi.SPI_ROLE_EMBEDDED : None, \ + atspi.SPI_ROLE_LAST_DEFINED: None } + +def getPixbufForNode(node): + theme = gtk.icon_theme_get_default() + try: + if node.role==atspi.SPI_ROLE_APPLICATION: + # FIXME: Use the pixbuf from libwcnk (if available): + # wnckApp = Application(node).getWnckApplication() + # if wnckApp + try: return theme.load_icon(node.name, 24, gtk.ICON_LOOKUP_USE_BUILTIN) + except gobject.GError: + try: return theme.load_icon(node.name.lower(), 24, gtk.ICON_LOOKUP_USE_BUILTIN) + except gobject.GError: return None + elif node.parent: + return iconForRole[node.role] + else: + return theme.load_icon("gnome-fs-desktop", 24, gtk.ICON_LOOKUP_USE_BUILTIN) + except atspi.SpiException: + return theme.load_icon("gtk-dialog-error", 24, gtk.ICON_LOOKUP_USE_BUILTIN) + +def getNodeAttr(column, cell, model, iter, attr): + node = model.get_value(iter, MODEL_FIELD_NODE) + try: + text = getattr(node, attr) + except atspi.SpiException: + text = "(broken node)" + cell.set_property('text', text) + +def getCellPixbufForNode(column, cell, model, iter): + node = model.get_value(iter, MODEL_FIELD_NODE) + pixbuf = getPixbufForNode(node) + cell.set_property('pixbuf', pixbuf) + +def main(): + connectSignals() + + nameTextLabel.set_text('') + roleNameTextLabel.set_text('') + descTextLabel.set_text('') + actionsTextLabel.set_text('') + textTextView.set_sensitive(False) + textTextView.get_buffer().set_text('') + + global sniff, view, model + + col = gtk.TreeViewColumn() + cellRenderer = gtk.CellRendererPixbuf() + col.pack_start(cellRenderer, expand = False) + col.set_cell_data_func(cellRenderer, getCellPixbufForNode) + + cellRenderer = gtk.CellRendererText() + col.pack_end(cellRenderer, expand = False) + col.set_cell_data_func(cellRenderer, getNodeAttr, 'name') + + col.set_title('Name') + + view.insert_column(col, -1) + #view.insert_column_with_data_func(-1, "Role Name", \ + # gtk.CellRendererText(), getNodeAttr, 'roleName') + #view.insert_column_with_data_func(-1, "Description", \ + # gtk.CellRendererText(), getNodeAttr, 'description') + for column in view.get_columns(): + column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + column.set_resizable(True) + view.show() + sniff.show_all () + + model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING, \ + gobject.TYPE_STRING, gobject.TYPE_STRING) + view.set_model(model) + + resetModel() + + gtk.main() + +if __name__ == '__main__': main() diff -Nur dogtail-0.6.1/sniff/dogtail-sniff.desktop dogtail-0.6.1.new/sniff/dogtail-sniff.desktop --- dogtail-0.6.1/sniff/dogtail-sniff.desktop 1970-01-01 10:00:00.000000000 +1000 +++ dogtail-0.6.1.new/sniff/dogtail-sniff.desktop 2006-08-22 04:03:24.000000000 +1000 @@ -0,0 +1,14 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=AT-SPI Browser +Name[en_CA]=AT-SPI Browser +Name[en_GB]=AT-SPI Browser +Comment=Browse your Assistive Technology-enabled desktop +Comment[en_CA]=Browse your Assistive Technology-enabled desktop +Comment[en_GB]=Browse your Assistive Technology-enabled desktop +Exec=sniff +Terminal=false +Type=Application +Icon=dogtail-head.svg +StartupNotify=true +Categories=Application;Development; diff -Nur dogtail-0.6.1/sniff/dogtail-sniff.glade dogtail-0.6.1.new/sniff/dogtail-sniff.glade --- dogtail-0.6.1/sniff/dogtail-sniff.glade 1970-01-01 10:00:00.000000000 +1000 +++ dogtail-0.6.1.new/sniff/dogtail-sniff.glade 2006-04-17 16:20:07.000000000 +1000 @@ -0,0 +1,498 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> +<requires lib="gnome"/> + +<widget class="GtkWindow" id="Sniff"> + <property name="width_request">325</property> + <property name="height_request">475</property> + <property name="visible">True</property> + <property name="title" translatable="yes">AT-SPI Browser</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">False</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> + + <child> + <widget class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkMenuBar" id="menubar1"> + <property name="visible">True</property> + <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property> + <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property> + + <child> + <widget class="GtkMenuItem" id="sniff1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Sniff</property> + <property name="use_underline">True</property> + + <child> + <widget class="GtkMenu" id="sniff1_menu"> + + <child> + <widget class="GtkImageMenuItem" id="quit1"> + <property name="visible">True</property> + <property name="stock_item">GNOMEUIINFO_MENU_EXIT_ITEM</property> + <signal name="activate" handler="on_quit1_activate" last_modification_time="Tue, 26 Jul 2005 14:21:44 GMT"/> + </widget> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="view1"> + <property name="visible">True</property> + <property name="stock_item">GNOMEUIINFO_MENU_VIEW_TREE</property> + + <child> + <widget class="GtkMenu" id="view1_menu"> + + <child> + <widget class="GtkImageMenuItem" id="refresh1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Refresh</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_refresh1_activate" last_modification_time="Wed, 27 Jul 2005 16:21:27 GMT"/> + <accelerator key="R" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-refresh</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkSeparatorMenuItem" id="separator3"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="expand_all1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Expand All</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_expand_all1_activate" last_modification_time="Wed, 27 Jul 2005 18:41:34 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="collapse_all1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Collapse All</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_collapse_all1_activate" last_modification_time="Wed, 27 Jul 2005 18:40:57 GMT"/> + </widget> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="help1"> + <property name="visible">True</property> + <property name="stock_item">GNOMEUIINFO_MENU_HELP_TREE</property> + + <child> + <widget class="GtkMenu" id="help1_menu"> + + <child> + <widget class="GtkImageMenuItem" id="about1"> + <property name="visible">True</property> + <property name="stock_item">GNOMEUIINFO_MENU_ABOUT_ITEM</property> + <signal name="activate" handler="on_about1_activate" last_modification_time="Tue, 26 Jul 2005 14:21:44 GMT"/> + </widget> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkVPaned" id="vpaned1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="position">350</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="treeTreeView"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_focus">True</property> + <property name="headers_visible">True</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <property name="fixed_height_mode">False</property> + <property name="hover_selection">False</property> + <property name="hover_expand">False</property> + </widget> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">False</property> + </packing> + </child> + + <child> + <widget class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">5</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + + <child> + <widget class="GtkLabel" id="nameLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Name:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="roleNameLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Role Name:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="descLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Description:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="nameTextLabel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">name</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="roleNameTextLabel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">roleName</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="descTextLabel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">description</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="textLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Text:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="actionsLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Actions:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="actionsTextLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">actions</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow3"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTextView" id="textTextView"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="overwrite">False</property> + <property name="accepts_tab">True</property> + <property name="justification">GTK_JUSTIFY_LEFT</property> + <property name="wrap_mode">GTK_WRAP_NONE</property> + <property name="cursor_visible">True</property> + <property name="pixels_above_lines">0</property> + <property name="pixels_below_lines">0</property> + <property name="pixels_inside_wrap">0</property> + <property name="left_margin">0</property> + <property name="right_margin">0</property> + <property name="indent">0</property> + <property name="text" translatable="yes"></property> + </widget> + </child> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">expand|shrink|fill</property> + <property name="y_options">expand|shrink|fill</property> + </packing> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff -Nur dogtail-0.6.1/sniff/sniff dogtail-0.6.1.new/sniff/sniff --- dogtail-0.6.1/sniff/sniff 2006-09-27 07:17:19.000000000 +1000 +++ dogtail-0.6.1.new/sniff/sniff 1970-01-01 10:00:00.000000000 +1000 @@ -1,406 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF8 -*- - -appName = 'Sniff' -appAuthors = ['Zack Cerza <zcerza redhat com>', 'David Malcolm <dmalcolm redhat com'] - -from dogtail.utils import checkForA11yInteractively -checkForA11yInteractively() - -from dogtail import tree -from dogtail import utils -import gobject -import gnome -import atspi -program = gnome.program_init(appName, '0.1') -import gtk.glade - -import os -if os.path.exists('sniff.glade'): - x = gtk.glade.XML('sniff.glade') -else: - import sys - exec_root = sys.argv[0].split("/bin/")[0] - if exec_root[0] is not '/': - exec_root = "/usr" - x = gtk.glade.XML(exec_root + '/share/dogtail/glade/sniff.glade') - -sniff = x.get_widget(appName) - -try: - sniff.set_icon_from_file('../icons/dogtail-head.svg') -except: - sniff.set_icon_from_file('/usr/share/icons/hicolor/scalable/apps/dogtail-head.svg') - -view = x.get_widget('treeTreeView') - -nameTextLabel = x.get_widget('nameTextLabel') -roleNameTextLabel = x.get_widget('roleNameTextLabel') -descTextLabel = x.get_widget('descTextLabel') -actionsTextLabel = x.get_widget('actionsTextLabel') -textLabel = x.get_widget('textLabel') -textTextView = x.get_widget('textTextView') - -# Indices of the various fields of the tree model: -MODEL_FIELD_NODE = 0 -MODEL_FIELD_NAME = 1 -MODEL_FIELD_ROLENAME = 2 -MODEL_FIELD_DESCRIPTION = 3 -MODEL_FIELD_PIXBUF = 4 - -def quit(*args): - gtk.main_quit() - -def expandAll(widget, *args): - global view - if args[0] == True: view.expand_all() - elif args[0] == False: view.collapse_all() - -def showAbout(*args): - about = gtk.AboutDialog() - about.set_name(appName) - about.set_authors(appAuthors) - about.set_comments('Explore your desktop with Dogtail') - about.set_website('http://people.redhat.com/zcerza/dogtail/') - about.show_all() - -def connectSignals(): - sniff.connect('delete_event', quit) - - quit1 = x.get_widget('quit1') - quit1.connect('activate', quit) - - expand_all1 = x.get_widget('expand_all1') - expand_all1.connect('activate', expandAll, True) - collapse_all1 = x.get_widget('collapse_all1') - collapse_all1.connect('activate', expandAll, False) - - about1 = x.get_widget('about1') - about1.connect('activate', showAbout) - - refreshMenuItem = x.get_widget('refresh1') - refreshMenuItem.connect('activate', refreshAll) - - view.connect('button-press-event', buttonPress) - view.connect('row-expanded', rowExpanded) - view.connect('row-collapsed', rowCollapsed) - treeSelection = view.get_selection() - treeSelection.connect('changed', selectionChanged) - -def buttonPress(widget, event, *userParams): - global model - try: path, treeViewCol, relX, relY = \ - view.get_path_at_pos(int(event.x), int(event.y)) - except TypeError: return - node = model[path][0] - setUpTable(node) - - if event.button == 3: - menu = gtk.Menu() - menuItem = None - if node.actions: - for action in node.actions.values(): - menuItem = gtk.MenuItem(action.name.capitalize()) - menuItem.connect('activate', menuItemActivate, action.do) - menuItem.show() - menu.append(menuItem) - if not menuItem: return - menu.show() - menu.popup(None, None, None, event.button, event.time) - -# I hate globals too. I think we need one here, though. -# Make it a non-integer, so we can know if it has been set yet (later). -textTextViewBufferChangedLastHandlerID = 3.141592654 - -def setUpTable(node): - """Generic code for setting up the table under the TreeView""" - nameTextLabel.set_text(node.name) - roleNameTextLabel.set_text(node.roleName) - descTextLabel.set_text(node.description) - if node.actions: - str = '' - for action in node.actions.values(): str = ' '.join([str, action.name]).strip() - actionsTextLabel.set_text(str) - - global textTextViewBufferChangedLastHandlerID - # Have we connected this signal yet? If so, disconnect it before proceeding. - if int(textTextViewBufferChangedLastHandlerID) == \ - textTextViewBufferChangedLastHandlerID: - textTextView.get_buffer().disconnect(textTextViewBufferChangedLastHandlerID) - - if node.text is not None: - buffer = textTextView.get_buffer() - buffer.set_text(node.text) - # Eeew! I'm touching tree's privates. - if node._Node__editableText: - # Remember the handler ID of this connection. - textTextView.set_sensitive(True) - textTextViewBufferChangedLastHandlerID = \ - buffer.connect('changed', changeText, node) - else: - textTextView.set_sensitive(False) - else: - textTextView.get_buffer().set_text('') - textTextView.set_sensitive(False) - -def changeText(textBuffer, node): - node.text = textBuffer.get_text(textBuffer.get_start_iter(), \ - textBuffer.get_end_iter()) - -def rowExpanded(treeview, iter, path, *userParams): - global model - row = model[path] - childRows = row.iterchildren() - node = row[0] - childNodes = node.children - for childNode in childNodes: - childRow = childRows.next() - addChildren(childNode, childRow.iter) - -def rowCollapsed(treeview, iter, path, *userParams): - global model - row = model[path] - childRows = row.iterchildren() - try: - while True: - childRow = childRows.next() - grandChildRows = childRow.iterchildren() - try: - while True: - grandChildRow = grandChildRows.next() - model.remove(grandChildRow.iter) - except StopIteration: pass - except StopIteration: pass - -def selectionChanged(treeSelection): - # print "selection changed" - node = getSelectedNode() - if node: node.blink() - -def getSelectedNode(): - global model - global view - (store, iter) = view.get_selection().get_selected() - if not iter: node = None - else: node = model[iter][0] - return node - -def menuItemActivate(menuItem, *userParams): - method = userParams[0] - if method: method() - -def refreshAll(menuItem, *userParams): - global model - resetModel() - -def addNodeToModel(node, parentInTreeView = None): - global model - iter = model.insert_before(parentInTreeView, None) - model.set_value(iter, MODEL_FIELD_NODE, node) - return iter - -def addChildren(node, parentInTreeView = None): - global model - for child in node.children: - iter = addNodeToModel(child, parentInTreeView) - -def showNode(node, parentInTreeView = None): - global model - iter = addNodeToModel(node, parentInTreeView) - addChildren(node, iter) - -def resetModel(): - global model - model.clear() - showNode(tree.root) - rootPath = model.get_path(model.get_iter_root()) - view.expand_row(rootPath, False) - -def loadIcon(iconName): - try: - pixbuf = gtk.gdk.pixbuf_new_from_file('icons/' + iconName) - except gobject.GError: - iconName = '/usr/share/dogtail/icons/' + iconName - pixbuf = gtk.gdk.pixbuf_new_from_file(iconName) - return pixbuf - -button_xpm = loadIcon("button.xpm") -checkbutton_xpm = loadIcon("checkbutton.xpm") -checkmenuitem_xpm = loadIcon("checkmenuitem.xpm") -colorselection_xpm = loadIcon("colorselection.xpm") -combo_xpm = loadIcon("combo.xpm") -dialog_xpm = loadIcon("dialog.xpm") -image_xpm = loadIcon("image.xpm") -label_xpm = loadIcon("label.xpm") -menubar_xpm = loadIcon("menubar.xpm") -menuitem_xpm = loadIcon("menuitem.xpm") -notebook_xpm = loadIcon("notebook.xpm") -scrolledwindow_xpm = loadIcon("scrolledwindow.xpm") -spinbutton_xpm = loadIcon("spinbutton.xpm") -statusbar_xpm = loadIcon("statusbar.xpm") -table_xpm = loadIcon("table.xpm") -text_xpm = loadIcon("text.xpm") -toolbar_xpm = loadIcon("toolbar.xpm") -tree_xpm = loadIcon("tree.xpm") -treeitem_xpm = loadIcon("treeitem.xpm") -unknown_xpm = loadIcon("unknown.xpm") -viewport_xpm = loadIcon("viewport.xpm") -vscrollbar_xpm = loadIcon("vscrollbar.xpm") -vseparator_xpm = loadIcon("vseparator.xpm") -window_xpm = loadIcon("window.xpm") - -iconForRole = { \ - atspi.SPI_ROLE_INVALID : None, \ - atspi.SPI_ROLE_ACCEL_LABEL : label_xpm, \ - atspi.SPI_ROLE_ALERT : None, \ - atspi.SPI_ROLE_ANIMATION : None, \ - atspi.SPI_ROLE_ARROW : None, \ - atspi.SPI_ROLE_CALENDAR : None, \ - atspi.SPI_ROLE_CANVAS : None, \ - atspi.SPI_ROLE_CHECK_BOX : checkbutton_xpm, \ - atspi.SPI_ROLE_CHECK_MENU_ITEM : checkmenuitem_xpm, \ - atspi.SPI_ROLE_COLOR_CHOOSER : colorselection_xpm, \ - atspi.SPI_ROLE_COLUMN_HEADER : None, \ - atspi.SPI_ROLE_COMBO_BOX : combo_xpm, \ - atspi.SPI_ROLE_DATE_EDITOR : None, \ - atspi.SPI_ROLE_DESKTOP_ICON : None, \ - atspi.SPI_ROLE_DESKTOP_FRAME : None, \ - atspi.SPI_ROLE_DIAL : None, \ - atspi.SPI_ROLE_DIALOG : dialog_xpm, \ - atspi.SPI_ROLE_DIRECTORY_PANE : None, \ - atspi.SPI_ROLE_DRAWING_AREA : None, \ - atspi.SPI_ROLE_FILE_CHOOSER : None, \ - atspi.SPI_ROLE_FILLER : None, \ - atspi.SPI_ROLE_FONT_CHOOSER : None, \ - atspi.SPI_ROLE_FRAME : window_xpm, \ - atspi.SPI_ROLE_GLASS_PANE : None, \ - atspi.SPI_ROLE_HTML_CONTAINER : None, \ - atspi.SPI_ROLE_ICON : image_xpm, \ - atspi.SPI_ROLE_IMAGE : image_xpm, \ - atspi.SPI_ROLE_INTERNAL_FRAME : None, \ - atspi.SPI_ROLE_LABEL : label_xpm, \ - atspi.SPI_ROLE_LAYERED_PANE : viewport_xpm, \ - atspi.SPI_ROLE_LIST : None, \ - atspi.SPI_ROLE_LIST_ITEM : None, \ - atspi.SPI_ROLE_MENU : menuitem_xpm, \ - atspi.SPI_ROLE_MENU_BAR : menubar_xpm, \ - atspi.SPI_ROLE_MENU_ITEM : menuitem_xpm, \ - atspi.SPI_ROLE_OPTION_PANE : None, \ - atspi.SPI_ROLE_PAGE_TAB : notebook_xpm, \ - atspi.SPI_ROLE_PAGE_TAB_LIST : notebook_xpm, \ - atspi.SPI_ROLE_PANEL : viewport_xpm, \ - atspi.SPI_ROLE_PASSWORD_TEXT : None, \ - atspi.SPI_ROLE_POPUP_MENU : None, \ - atspi.SPI_ROLE_PROGRESS_BAR : None, \ - atspi.SPI_ROLE_PUSH_BUTTON : button_xpm, \ - atspi.SPI_ROLE_RADIO_BUTTON : None, \ - atspi.SPI_ROLE_RADIO_MENU_ITEM : None, \ - atspi.SPI_ROLE_ROOT_PANE : viewport_xpm, \ - atspi.SPI_ROLE_ROW_HEADER : None, \ - atspi.SPI_ROLE_SCROLL_BAR : vscrollbar_xpm, \ - atspi.SPI_ROLE_SCROLL_PANE : scrolledwindow_xpm, \ - atspi.SPI_ROLE_SEPARATOR : vseparator_xpm, \ - atspi.SPI_ROLE_SLIDER : None, \ - atspi.SPI_ROLE_SPIN_BUTTON : spinbutton_xpm, \ - atspi.SPI_ROLE_SPLIT_PANE : None, \ - atspi.SPI_ROLE_STATUS_BAR : statusbar_xpm, \ - atspi.SPI_ROLE_TABLE : table_xpm, \ - atspi.SPI_ROLE_TABLE_CELL : treeitem_xpm, \ - atspi.SPI_ROLE_TABLE_COLUMN_HEADER : None, \ - atspi.SPI_ROLE_TABLE_ROW_HEADER : None, \ - atspi.SPI_ROLE_TEAROFF_MENU_ITEM : None, \ - atspi.SPI_ROLE_TERMINAL : None, \ - atspi.SPI_ROLE_TEXT : text_xpm, \ - atspi.SPI_ROLE_TOGGLE_BUTTON : None, \ - atspi.SPI_ROLE_TOOL_BAR : toolbar_xpm, \ - atspi.SPI_ROLE_TOOL_TIP : None, \ - atspi.SPI_ROLE_TREE : tree_xpm, \ - atspi.SPI_ROLE_TREE_TABLE : tree_xpm, \ - atspi.SPI_ROLE_UNKNOWN : unknown_xpm, \ - atspi.SPI_ROLE_VIEWPORT : viewport_xpm, \ - atspi.SPI_ROLE_WINDOW : window_xpm, \ - atspi.SPI_ROLE_EXTENDED : None, \ - atspi.SPI_ROLE_HEADER : None, \ - atspi.SPI_ROLE_FOOTER : None, \ - atspi.SPI_ROLE_PARAGRAPH : None, \ - atspi.SPI_ROLE_RULER : None, \ - atspi.SPI_ROLE_APPLICATION : None, \ - atspi.SPI_ROLE_AUTOCOMPLETE : None, \ - atspi.SPI_ROLE_EDITBAR : None, \ - atspi.SPI_ROLE_EMBEDDED : None, \ - atspi.SPI_ROLE_LAST_DEFINED: None } - -def getPixbufForNode(node): - theme = gtk.icon_theme_get_default() - try: - if node.role==atspi.SPI_ROLE_APPLICATION: - # FIXME: Use the pixbuf from libwcnk (if available): - # wnckApp = Application(node).getWnckApplication() - # if wnckApp - try: return theme.load_icon(node.name, 24, gtk.ICON_LOOKUP_USE_BUILTIN) - except gobject.GError: - try: return theme.load_icon(node.name.lower(), 24, gtk.ICON_LOOKUP_USE_BUILTIN) - except gobject.GError: return None - elif node.parent: - return iconForRole[node.role] - else: - return theme.load_icon("gnome-fs-desktop", 24, gtk.ICON_LOOKUP_USE_BUILTIN) - except atspi.SpiException: - return theme.load_icon("gtk-dialog-error", 24, gtk.ICON_LOOKUP_USE_BUILTIN) - -def getNodeAttr(column, cell, model, iter, attr): - node = model.get_value(iter, MODEL_FIELD_NODE) - try: - text = getattr(node, attr) - except atspi.SpiException: - text = "(broken node)" - cell.set_property('text', text) - -def getCellPixbufForNode(column, cell, model, iter): - node = model.get_value(iter, MODEL_FIELD_NODE) - pixbuf = getPixbufForNode(node) - cell.set_property('pixbuf', pixbuf) - -def main(): - connectSignals() - - nameTextLabel.set_text('') - roleNameTextLabel.set_text('') - descTextLabel.set_text('') - actionsTextLabel.set_text('') - textTextView.set_sensitive(False) - textTextView.get_buffer().set_text('') - - global sniff, view, model - - col = gtk.TreeViewColumn() - cellRenderer = gtk.CellRendererPixbuf() - col.pack_start(cellRenderer, expand = False) - col.set_cell_data_func(cellRenderer, getCellPixbufForNode) - - cellRenderer = gtk.CellRendererText() - col.pack_end(cellRenderer, expand = False) - col.set_cell_data_func(cellRenderer, getNodeAttr, 'name') - - col.set_title('Name') - - view.insert_column(col, -1) - #view.insert_column_with_data_func(-1, "Role Name", \ - # gtk.CellRendererText(), getNodeAttr, 'roleName') - #view.insert_column_with_data_func(-1, "Description", \ - # gtk.CellRendererText(), getNodeAttr, 'description') - for column in view.get_columns(): - column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - column.set_resizable(True) - view.show() - sniff.show_all () - - model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING, \ - gobject.TYPE_STRING, gobject.TYPE_STRING) - view.set_model(model) - - resetModel() - - gtk.main() - -if __name__ == '__main__': main() diff -Nur dogtail-0.6.1/sniff/sniff.desktop dogtail-0.6.1.new/sniff/sniff.desktop --- dogtail-0.6.1/sniff/sniff.desktop 2006-08-22 04:03:24.000000000 +1000 +++ dogtail-0.6.1.new/sniff/sniff.desktop 1970-01-01 10:00:00.000000000 +1000 @@ -1,14 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=AT-SPI Browser -Name[en_CA]=AT-SPI Browser -Name[en_GB]=AT-SPI Browser -Comment=Browse your Assistive Technology-enabled desktop -Comment[en_CA]=Browse your Assistive Technology-enabled desktop -Comment[en_GB]=Browse your Assistive Technology-enabled desktop -Exec=sniff -Terminal=false -Type=Application -Icon=dogtail-head.svg -StartupNotify=true -Categories=Application;Development; diff -Nur dogtail-0.6.1/sniff/sniff.glade dogtail-0.6.1.new/sniff/sniff.glade --- dogtail-0.6.1/sniff/sniff.glade 2006-04-17 16:20:07.000000000 +1000 +++ dogtail-0.6.1.new/sniff/sniff.glade 1970-01-01 10:00:00.000000000 +1000 @@ -1,498 +0,0 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - -<glade-interface> -<requires lib="gnome"/> - -<widget class="GtkWindow" id="Sniff"> - <property name="width_request">325</property> - <property name="height_request">475</property> - <property name="visible">True</property> - <property name="title" translatable="yes">AT-SPI Browser</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - - <child> - <widget class="GtkVBox" id="vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkMenuBar" id="menubar1"> - <property name="visible">True</property> - <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property> - <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property> - - <child> - <widget class="GtkMenuItem" id="sniff1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Sniff</property> - <property name="use_underline">True</property> - - <child> - <widget class="GtkMenu" id="sniff1_menu"> - - <child> - <widget class="GtkImageMenuItem" id="quit1"> - <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_EXIT_ITEM</property> - <signal name="activate" handler="on_quit1_activate" last_modification_time="Tue, 26 Jul 2005 14:21:44 GMT"/> - </widget> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkMenuItem" id="view1"> - <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_VIEW_TREE</property> - - <child> - <widget class="GtkMenu" id="view1_menu"> - - <child> - <widget class="GtkImageMenuItem" id="refresh1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Refresh</property> - <property name="use_underline">True</property> - <signal name="activate" handler="on_refresh1_activate" last_modification_time="Wed, 27 Jul 2005 16:21:27 GMT"/> - <accelerator key="R" modifiers="GDK_CONTROL_MASK" signal="activate"/> - - <child internal-child="image"> - <widget class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-refresh</property> - <property name="icon_size">1</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkSeparatorMenuItem" id="separator3"> - <property name="visible">True</property> - </widget> - </child> - - <child> - <widget class="GtkMenuItem" id="expand_all1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Expand All</property> - <property name="use_underline">True</property> - <signal name="activate" handler="on_expand_all1_activate" last_modification_time="Wed, 27 Jul 2005 18:41:34 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkMenuItem" id="collapse_all1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Collapse All</property> - <property name="use_underline">True</property> - <signal name="activate" handler="on_collapse_all1_activate" last_modification_time="Wed, 27 Jul 2005 18:40:57 GMT"/> - </widget> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkMenuItem" id="help1"> - <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_HELP_TREE</property> - - <child> - <widget class="GtkMenu" id="help1_menu"> - - <child> - <widget class="GtkImageMenuItem" id="about1"> - <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_ABOUT_ITEM</property> - <signal name="activate" handler="on_about1_activate" last_modification_time="Tue, 26 Jul 2005 14:21:44 GMT"/> - </widget> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVPaned" id="vpaned1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="position">350</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow2"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="treeTreeView"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </widget> - </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">False</property> - </packing> - </child> - - <child> - <widget class="GtkTable" id="table1"> - <property name="visible">True</property> - <property name="n_rows">5</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> - - <child> - <widget class="GtkLabel" id="nameLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Name:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="roleNameLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Role Name:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="descLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Description:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="nameTextLabel"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">name</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">True</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="roleNameTextLabel"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">roleName</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">True</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="descTextLabel"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">description</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">True</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="textLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Text:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="actionsLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">Actions:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="actionsTextLabel"> - <property name="visible">True</property> - <property name="label" translatable="yes">actions</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow3"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTextView" id="textTextView"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_NONE</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></property> - </widget> - </child> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">expand|shrink|fill</property> - <property name="y_options">expand|shrink|fill</property> - </packing> - </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface>
diff -Nur dogtail-0.6.1/sniff/dogtail-sniff dogtail-0.6.1.new/sniff/dogtail-sniff --- dogtail-0.6.1/sniff/dogtail-sniff 2007-03-17 11:25:39.868957382 +1100 +++ dogtail-0.6.1.new/sniff/dogtail-sniff 2007-03-17 11:27:24.562923549 +1100 @@ -16,14 +16,14 @@ import gtk.glade import os -if os.path.exists('sniff.glade'): - x = gtk.glade.XML('sniff.glade') +if os.path.exists('dogtail-sniff.glade'): + x = gtk.glade.XML('dogtail-sniff.glade') else: import sys exec_root = sys.argv[0].split("/bin/")[0] if exec_root[0] is not '/': exec_root = "/usr" - x = gtk.glade.XML(exec_root + '/share/dogtail/glade/sniff.glade') + x = gtk.glade.XML(exec_root + '/share/dogtail/glade/dogtail-sniff.glade') sniff = x.get_widget(appName) diff -Nur dogtail-0.6.1/sniff/dogtail-sniff.desktop dogtail-0.6.1.new/sniff/dogtail-sniff.desktop --- dogtail-0.6.1/sniff/dogtail-sniff.desktop 2007-03-17 11:25:39.872957610 +1100 +++ dogtail-0.6.1.new/sniff/dogtail-sniff.desktop 2007-03-17 11:26:24.895523300 +1100 @@ -6,7 +6,7 @@ Comment=Browse your Assistive Technology-enabled desktop Comment[en_CA]=Browse your Assistive Technology-enabled desktop Comment[en_GB]=Browse your Assistive Technology-enabled desktop -Exec=sniff +Exec=dogtail-sniff Terminal=false Type=Application Icon=dogtail-head.svg
diff -Nur dogtail-0.6.1/dogtail.spec dogtail-0.6.1.new/dogtail.spec --- dogtail-0.6.1/dogtail.spec 2006-10-17 05:25:22.000000000 +1000 +++ dogtail-0.6.1.new/dogtail.spec 2007-03-17 11:47:14.470732533 +1100 @@ -33,7 +33,7 @@ python ./setup.py install -O2 --root=$RPM_BUILD_ROOT --record=%{name}.files rm -rf $RPM_BUILD_ROOT/%{_docdir}/dogtail find examples -type f -exec chmod 0644 \{\} \; -desktop-file-install $RPM_BUILD_ROOT/%{_datadir}/applications/sniff.desktop \ +desktop-file-install $RPM_BUILD_ROOT/%{_datadir}/applications/dogtail-sniff.desktop \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT/%{_datadir}/applications \ --add-category X-Fedora \ diff -Nur dogtail-0.6.1/Makefile dogtail-0.6.1.new/Makefile --- dogtail-0.6.1/Makefile 2006-07-29 03:51:47.000000000 +1000 +++ dogtail-0.6.1.new/Makefile 2007-03-17 11:47:14.470732533 +1100 @@ -18,7 +18,7 @@ export StudlyCaps='[a-zA-Z_][a-zA-Z0-9_]*$$' check: - pylint --indent-string=" " --class-rgx=${StudlyCaps} --function-rgx=${camelCAPS} --method-rgx=${camelCAPS} --variable-rgx=${camelCAPS} --argument-rgx=${camelCaps} dogtail sniff/sniff examples/*.py + pylint --indent-string=" " --class-rgx=${StudlyCaps} --function-rgx=${camelCAPS} --method-rgx=${camelCAPS} --variable-rgx=${camelCAPS} --argument-rgx=${camelCaps} dogtail sniff/dogtail-sniff examples/*.py tarball: python setup.py sdist diff -Nur dogtail-0.6.1/setup.py dogtail-0.6.1.new/setup.py --- dogtail-0.6.1/setup.py 2006-09-22 03:21:27.000000000 +1000 +++ dogtail-0.6.1.new/setup.py 2007-03-17 11:48:25.926804582 +1100 @@ -43,7 +43,7 @@ def scripts(): import os list = os.listdir(os.curdir + '/scripts/') - result = ['sniff/sniff', 'recorder/dogtail-recorder'] + result = ['sniff/dogtail-sniff', 'recorder/dogtail-recorder'] for file in list: if file != 'CVS': result = result + ['scripts/' + file] @@ -65,10 +65,10 @@ examples() ), ('share/doc/dogtail/examples/data', examples_data() ), - ('share/dogtail/glade', ['sniff/sniff.glade', + ('share/dogtail/glade', ['sniff/dogtail-sniff.glade', 'recorder/recorder.glade']), ('share/dogtail/icons', sniff_icons() ), - ('share/applications', ['sniff/sniff.desktop', + ('share/applications', ['sniff/dogtail-sniff.desktop', 'recorder/dogtail-recorder.desktop']), ('share/icons/hicolor/48x48/apps', icons('png')), ('share/icons/hicolor/scalable/apps', icons('svg'))
Attachment:
signature.asc
Description: Digital signature