~ubuntu-branches/ubuntu/oneiric/synaptic/oneiric

« back to all changes in this revision

Viewing changes to gtk/rgdebinstallprogress.cc

  • Committer: Bazaar Package Importer
  • Author(s): Michael Vogt
  • Date: 2010-11-10 19:44:31 UTC
  • mfrom: (3.2.7 sid)
  • Revision ID: james.westby@ubuntu.com-20101110194431-i4810q8drta06cao
Tags: 0.70~pre2ubuntu1

* merged from debian/unstable, remaining changes:
  - ubuntu icons for supported applications
  - launchpad-integration
  - ubuntu changelog download support
  - support section metapackages
  - x-ubuntu-gettext-domain in desktop file

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
#include <cstdlib>
47
47
 
48
48
#include <vte/vte.h>
 
49
#include <gdk/gdkkeysyms.h>
49
50
 
50
51
 
51
52
#include "i18n.h"
404
405
   }
405
406
   gtk_box_pack_start(GTK_BOX(glade_xml_get_widget(_gladeXML,"hbox_vte")), _term, TRUE, TRUE, 0);
406
407
   g_signal_connect(G_OBJECT(_term), "key-press-event", G_CALLBACK(key_press_event), this);
407
 
   
 
408
   g_signal_connect(G_OBJECT(_term), "button-press-event",
 
409
           (GCallback) cbTerminalClicked, this);
408
410
 
409
411
   gtk_widget_show(_term);
 
412
 
 
413
   // Terminal contextual menu
 
414
   GtkWidget *img, *menuitem;
 
415
   _popupMenu = gtk_menu_new();
 
416
   menuitem = gtk_image_menu_item_new_with_label(_("Copy"));
 
417
   img = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
 
418
   gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), img);
 
419
   g_object_set_data(G_OBJECT(menuitem), "me", this);
 
420
   g_signal_connect(menuitem, "activate",
 
421
                    (GCallback) cbMenuitemClicked, (void *)EDIT_COPY);
 
422
   gtk_menu_shell_append(GTK_MENU_SHELL(_popupMenu), menuitem);
 
423
   gtk_widget_show(menuitem);
 
424
 
 
425
   menuitem = gtk_image_menu_item_new_with_label(_("Select All"));
 
426
   img = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
 
427
   gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), img);
 
428
   g_object_set_data(G_OBJECT(menuitem), "me", this);
 
429
   g_signal_connect(menuitem, "activate",
 
430
                    (GCallback) cbMenuitemClicked, (void *)EDIT_SELECT_ALL);
 
431
   gtk_menu_shell_append(GTK_MENU_SHELL(_popupMenu), menuitem);
 
432
   gtk_widget_show(menuitem);
 
433
 
410
434
   gtk_box_pack_end(GTK_BOX(glade_xml_get_widget(_gladeXML,"hbox_vte")), scrollbar, FALSE, FALSE, 0);
411
435
   gtk_widget_show(scrollbar);
412
436
 
451
475
   RGDebInstallProgress *me = (RGDebInstallProgress *)user_data;
452
476
 
453
477
   // user pressed ctrl-c
454
 
   if (strlen(event->string) == 1 && event->string[0] == 3) {
 
478
   if (event->keyval == GDK_c && event->state & GDK_CONTROL_MASK) {
455
479
      gchar *summary = _("Ctrl-c pressed");
456
480
      char *msg = _("This will abort the operation and may leave the system "
457
481
                    "in a broken state. Are you sure you want to do that?");
469
493
         case GTK_RESPONSE_NO:
470
494
            return true;
471
495
      }
472
 
   }
473
 
   return false;
 
496
   } else if (event->keyval == GDK_C && 
 
497
           event->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
 
498
      // ctrl+shift+C copy to clipboard to mimic gnome-terminal behavior
 
499
      me->terminalAction(me->_term, EDIT_COPY);
 
500
          return true;
 
501
   } else if (event->keyval == GDK_a && event->state & GDK_CONTROL_MASK) {
 
502
      me->terminalAction(me->_term, EDIT_SELECT_ALL);
 
503
          return true;
 
504
   } else if (event->keyval == GDK_A &&
 
505
           event->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
 
506
      me->terminalAction(me->_term, EDIT_SELECT_NONE);
 
507
          return true;
 
508
   } 
 
509
   return false;
 
510
}
 
511
 
 
512
gboolean RGDebInstallProgress::cbTerminalClicked(GtkWidget *widget,
 
513
        GdkEventButton *event, gpointer user_data)
 
514
{
 
515
   if (event->button == 3) {
 
516
      RGDebInstallProgress *me = (RGDebInstallProgress *)user_data;
 
517
      gtk_menu_popup(GTK_MENU(me->_popupMenu), NULL, NULL, NULL, NULL,
 
518
              event->button,
 
519
              gdk_event_get_time((GdkEvent *) event));
 
520
      return true;
 
521
   }
 
522
   return false;
 
523
}
 
524
 
 
525
void RGDebInstallProgress::cbMenuitemClicked(GtkMenuItem *menuitem,
 
526
        gpointer user_data) {
 
527
   RGDebInstallProgress *me = 
 
528
       (RGDebInstallProgress *)g_object_get_data(G_OBJECT(menuitem), "me");
 
529
   me->terminalAction(me->_term, (TermAction)GPOINTER_TO_INT(user_data));
 
530
}
 
531
 
 
532
void RGDebInstallProgress::terminalAction(GtkWidget *terminal,
 
533
        TermAction action) {
 
534
   switch(action) {
 
535
      case EDIT_COPY:
 
536
          vte_terminal_copy_clipboard(VTE_TERMINAL(terminal));
 
537
          break;
 
538
      case EDIT_SELECT_ALL:
 
539
          vte_terminal_select_all(VTE_TERMINAL(terminal));
 
540
          break;
 
541
      case EDIT_SELECT_NONE:
 
542
          vte_terminal_select_none(VTE_TERMINAL(terminal));
 
543
          break;
 
544
   }
474
545
}
475
546
 
476
547
void RGDebInstallProgress::updateInterface()
494
565
      if( buf[0] == '\n') {
495
566
         //cout << "got line: " << line << endl;
496
567
         
497
 
         gchar **split = g_strsplit(line, ":",5);
 
568
         gchar **split = g_strsplit(line, ":",4);
498
569
         gchar *status = g_strstrip(split[0]);
499
570
         gchar *pkg = g_strstrip(split[1]);
500
571
         gchar *percent = g_strstrip(split[2]);