104
104
    bzrlib.ui.ui_factory = GtkUIFactory()
 
108
 
    return os.path.dirname(__file__)
 
111
 
def icon_path(*args):
 
112
 
    basedirs = [os.path.join(data_path()),
 
 
108
    return [os.path.dirname(__file__),
 
113
109
             "/usr/share/bzr-gtk", 
 
114
110
             "/usr/local/share/bzr-gtk"]
 
115
 
    for basedir in basedirs:
 
116
 
        path = os.path.join(basedir, 'icons', *args)
 
 
113
def data_path(*args):
 
 
114
    for basedir in data_basedirs():
 
 
115
        path = os.path.join(basedir, *args)
 
117
116
        if os.path.exists(path):
 
 
121
def icon_path(*args):
 
 
122
    return data_path(os.path.join('icons', *args))
 
122
125
def open_display():
 
123
126
    pygtk = import_pygtk()
 
 
 
455
class cmd_gmerge(Command):
 
 
456
    """ GTK+ merge dialog
 
 
459
    takes_args = ["merge_from_path?"]
 
 
460
    def run(self, merge_from_path=None):
 
 
461
        from bzrlib import workingtree
 
 
462
        from bzrlib.plugins.gtk.dialog import error_dialog
 
 
463
        from bzrlib.plugins.gtk.merge import MergeDialog
 
 
465
        (wt, path) = workingtree.WorkingTree.open_containing('.')
 
 
466
        old_tree = wt.branch.repository.revision_tree(wt.branch.last_revision())
 
 
467
        delta = wt.changes_from(old_tree)
 
 
468
        if len(delta.added) or len(delta.removed) or len(delta.renamed) or len(delta.modified):
 
 
469
            error_dialog(_i18n('There are local changes in the branch'),
 
 
470
                         _i18n('Please commit or revert the changes before merging.'))
 
 
472
            parent_branch_path = wt.branch.get_parent()
 
 
473
            merge = MergeDialog(wt, path, parent_branch_path)
 
 
474
            response = merge.run()
 
452
478
class cmd_gmissing(Command):
 
453
479
    """ GTK+ missing revisions dialog.
 
 
525
552
    register_command(cmd)
 
528
 
class cmd_commit_notify(GTKCommand):
 
529
 
    """Run the bzr commit notifier.
 
531
 
    This is a background program which will pop up a notification on the users
 
532
 
    screen when a commit occurs.
 
536
 
        from notify import NotifyPopupMenu
 
538
 
        menu = NotifyPopupMenu()
 
539
 
        icon = gtk.status_icon_new_from_file(icon_path("bzr-icon-64.png"))
 
540
 
        icon.connect('popup-menu', menu.display)
 
546
 
        from bzrlib.bzrdir import BzrDir
 
547
 
        from bzrlib import errors
 
548
 
        from bzrlib.osutils import format_date
 
549
 
        from bzrlib.transport import get_transport
 
550
 
        if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
 
552
 
        BROADCAST_INTERFACE = "org.bazaarvcs.plugins.dbus.Broadcast"
 
553
 
        bus = dbus.SessionBus()
 
555
 
        def catch_branch(revision_id, urls):
 
556
 
            # TODO: show all the urls, or perhaps choose the 'best'.
 
559
 
                if isinstance(revision_id, unicode):
 
560
 
                    revision_id = revision_id.encode('utf8')
 
561
 
                transport = get_transport(url)
 
562
 
                a_dir = BzrDir.open_from_transport(transport)
 
563
 
                branch = a_dir.open_branch()
 
564
 
                revno = branch.revision_id_to_revno(revision_id)
 
565
 
                revision = branch.repository.get_revision(revision_id)
 
566
 
                summary = 'New revision %d in %s' % (revno, url)
 
567
 
                body  = 'Committer: %s\n' % revision.committer
 
568
 
                body += 'Date: %s\n' % format_date(revision.timestamp,
 
571
 
                body += revision.message
 
572
 
                body = cgi.escape(body)
 
573
 
                nw = pynotify.Notification(summary, body)
 
574
 
                def start_viz(notification=None, action=None, data=None):
 
575
 
                    """Start the viz program."""
 
576
 
                    pp = start_viz_window(branch, revision_id)
 
578
 
                def start_branch(notification=None, action=None, data=None):
 
579
 
                    """Start a Branch dialog"""
 
580
 
                    from bzrlib.plugins.gtk.branch import BranchDialog
 
581
 
                    bd = BranchDialog(remote_path=url)
 
583
 
                nw.add_action("inspect", "Inspect", start_viz, None)
 
584
 
                nw.add_action("branch", "Branch", start_branch, None)
 
590
 
        bus.add_signal_receiver(catch_branch,
 
591
 
                                dbus_interface=BROADCAST_INTERFACE,
 
592
 
                                signal_name="Revision")
 
593
 
        pynotify.init("bzr commit-notify")
 
596
 
register_command(cmd_commit_notify)
 
599
555
class cmd_gselftest(GTKCommand):
 
600
556
    """Version of selftest that displays a notification at the end"""