예제 #1
0
static GtkCellArea *
create_cell_area (void)
{
  GtkCellArea *area;
  GtkCellRenderer *renderer;

  area = gtk_cell_area_box_new ();

  cell_1 = renderer = gtk_cell_renderer_text_new ();
  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, FALSE, FALSE);
  gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_NAME);

  cell_2 = renderer = gtk_cell_renderer_pixbuf_new ();
  g_object_set (G_OBJECT (renderer), "xalign", 0.0F, NULL);
  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE, FALSE);
  gtk_cell_area_attribute_connect (area, renderer, "icon-name", SIMPLE_COLUMN_ICON);

  cell_3 = renderer = gtk_cell_renderer_text_new ();
  g_object_set (G_OBJECT (renderer), 
		"wrap-mode", PANGO_WRAP_WORD,
		"wrap-width", 215,
		NULL);
  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE, FALSE);
  gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_DESCRIPTION);

  return area;
}
예제 #2
0
파일: gtkcellview.c 프로젝트: BYC/gtk
static GObject *
gtk_cell_view_constructor (GType                  type,
			   guint                  n_construct_properties,
			   GObjectConstructParam *construct_properties)
{
  GObject            *object;
  GtkCellView        *view;
  GtkCellViewPrivate *priv;

  object = G_OBJECT_CLASS (gtk_cell_view_parent_class)->constructor
    (type, n_construct_properties, construct_properties);

  view = GTK_CELL_VIEW (object);
  priv = view->priv;

  if (!priv->area)
    {
      priv->area = gtk_cell_area_box_new ();
      g_object_ref_sink (priv->area);
    }

  if (!priv->context)
    priv->context = gtk_cell_area_create_context (priv->area);

  priv->size_changed_id =
    g_signal_connect (priv->context, "notify",
		      G_CALLBACK (context_size_changed_cb), view);

  return object;
}
예제 #3
0
파일: cellareascaffold.c 프로젝트: BYC/gtk
static void
cell_area_scaffold_init (CellAreaScaffold *scaffold)
{
  CellAreaScaffoldPrivate *priv;

  scaffold->priv = G_TYPE_INSTANCE_GET_PRIVATE (scaffold,
						TYPE_CELL_AREA_SCAFFOLD,
						CellAreaScaffoldPrivate);
  priv = scaffold->priv;

  priv->area    = gtk_cell_area_box_new ();
  priv->context = gtk_cell_area_create_context (priv->area);

  priv->row_data = g_array_new (FALSE, FALSE, sizeof (RowData));

  gtk_widget_set_has_window (GTK_WIDGET (scaffold), FALSE);
  gtk_widget_set_can_focus (GTK_WIDGET (scaffold), TRUE);

  priv->size_changed_id = 
    g_signal_connect (priv->context, "notify",
		      G_CALLBACK (size_changed_cb), scaffold);

  priv->focus_changed_id =
    g_signal_connect (priv->area, "focus-changed",
		      G_CALLBACK (focus_changed_cb), scaffold);

  priv->add_editable_id =
    g_signal_connect (priv->area, "add-editable",
		      G_CALLBACK (add_editable_cb), scaffold);

  priv->remove_editable_id =
    g_signal_connect (priv->area, "remove-editable",
		      G_CALLBACK (remove_editable_cb), scaffold);
}
예제 #4
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that new_with_area() keeps the provided area */
static void
test_completion_new_with_area (void)
{
    GtkEntryCompletion *c;
    GtkCellArea *area;

    area = gtk_cell_area_box_new ();
    c = gtk_entry_completion_new_with_area (area);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)) == area);

    g_object_ref_sink (c);
    g_object_unref (c);
}
예제 #5
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that new_with_area() keeps the provided area */
static void
test_column_new_with_area (void)
{
    GtkTreeViewColumn *col;
    GtkCellArea *area;

    area = gtk_cell_area_box_new ();
    col = gtk_tree_view_column_new_with_area (area);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)) == area);

    g_object_ref_sink (col);
    g_object_unref (col);
}
예제 #6
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that new_with_area() keeps the provided area */
static void
test_iconview_new_with_area (void)
{
    GtkWidget *view;
    GtkCellArea *area;

    area = gtk_cell_area_box_new ();
    view = gtk_icon_view_new_with_area (area);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);

    g_object_ref_sink (view);
    g_object_unref (view);
}
예제 #7
0
파일: gtkcellview.c 프로젝트: BYC/gtk
/* GtkCellLayout implementation */
static GtkCellArea *
gtk_cell_view_cell_layout_get_area (GtkCellLayout   *layout)
{
  GtkCellView *cellview = GTK_CELL_VIEW (layout);
  GtkCellViewPrivate *priv = cellview->priv;

  if (G_UNLIKELY (!priv->area))
    {
      priv->area = gtk_cell_area_box_new ();
      g_object_ref_sink (priv->area);
    }

  return priv->area;
}
예제 #8
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that g_object_new keeps the provided area */
static void
test_completion_object_new (void)
{
    GtkEntryCompletion *c;
    GtkCellArea *area;

    area = gtk_cell_area_box_new ();
    gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
    c = g_object_new (GTK_TYPE_ENTRY_COMPLETION, "cell-area", area, NULL);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)) == area);

    g_object_ref_sink (c);
    g_object_unref (c);
}
예제 #9
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that g_object_new keeps the provided area */
static void
test_column_object_new (void)
{
    GtkTreeViewColumn *col;
    GtkCellArea *area;

    area = gtk_cell_area_box_new ();
    gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
    col = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN, "cell-area", area, NULL);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)) == area);

    g_object_ref_sink (col);
    g_object_unref (col);
}
예제 #10
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that g_object_new keeps the provided area */
static void
test_cellview_object_new (void)
{
    GtkWidget *view;
    GtkCellArea *area;

    area = gtk_cell_area_box_new ();
    gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
    view = g_object_new (GTK_TYPE_CELL_VIEW, "cell-area", area, NULL);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);

    g_object_ref_sink (view);
    g_object_unref (view);
}
예제 #11
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that new_with_context() keeps the provided area */
static void
test_cellview_new_with_context (void)
{
    GtkWidget *view;
    GtkCellArea *area;
    GtkCellAreaContext *context;

    area = gtk_cell_area_box_new ();
    context = gtk_cell_area_create_context (area);
    view = gtk_cell_view_new_with_context (area, context);
    g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);

    g_object_ref_sink (view);
    g_object_unref (view);
}
예제 #12
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that a completion subclass keeps the provided area */
static void
test_completion_subclass1 (void)
{
    GtkEntryCompletion *c;
    GtkCellArea *area;

    subclass_init = 0;

    area = gtk_cell_area_box_new ();
    c = g_object_new (my_entry_completion_get_type (), "cell-area", area, NULL);
    g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)));
    g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);

    g_object_ref_sink (c);
    g_object_unref (c);
}
예제 #13
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that a column subclass keeps the provided area */
static void
test_column_subclass1 (void)
{
    GtkTreeViewColumn *col;
    GtkCellArea *area;

    subclass_init = 0;

    area = gtk_cell_area_box_new ();
    col = g_object_new (my_tree_view_column_get_type (), "cell-area", area, NULL);
    g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)));
    g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);

    g_object_ref_sink (col);
    g_object_unref (col);
}
예제 #14
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test that a cellview subclass keeps the provided area */
static void
test_cellview_subclass1 (void)
{
    GtkWidget *view;
    GtkCellArea *area;

    subclass_init = 0;

    area = gtk_cell_area_box_new ();
    view = g_object_new (my_cell_view_get_type (), "cell-area", area, NULL);
    g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
    g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);

    g_object_ref_sink (view);
    g_object_unref (view);
}
예제 #15
0
파일: cellarea.c 프로젝트: nacho/gtk-
/* test we get a warning if an area is provided, but ignored */
static void
test_completion_subclass3 (void)
{
    subclass_init = 1;

    if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
    {
        GtkEntryCompletion *c;
        GtkCellArea *area;

        area = gtk_cell_area_box_new ();
        c = g_object_new (my_entry_completion_get_type (), "cell-area", area, NULL);
        g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)));
        g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);

        g_object_ref_sink (c);
        g_object_unref (c);

        exit (0);
    }
    g_test_trap_assert_failed ();
    g_test_trap_assert_stderr ("*ignoring construct property*");
}
예제 #16
0
static void
ring_main_window_init(RingMainWindow *win)
{
    RingMainWindowPrivate *priv = RING_MAIN_WINDOW_GET_PRIVATE(win);
    gtk_widget_init_template(GTK_WIDGET(win));

     /* set window icon */
    GError *error = NULL;
    GdkPixbuf* icon = gdk_pixbuf_new_from_resource("/cx/ring/RingGnome/ring-symbol-blue", &error);
    if (icon == NULL) {
        g_debug("Could not load icon: %s", error->message);
        g_clear_error(&error);
    } else
        gtk_window_set_icon(GTK_WINDOW(win), icon);

    /* set menu icon */
    GdkPixbuf* image_ring = gdk_pixbuf_new_from_resource_at_scale("/cx/ring/RingGnome/ring-symbol-blue",
                                                                  -1, 24, TRUE, &error);
    if (image_ring == NULL) {
        g_debug("Could not load icon: %s", error->message);
        g_clear_error(&error);
    } else
        gtk_image_set_from_pixbuf(GTK_IMAGE(priv->image_ring), image_ring);

    /* ring menu */
    GtkBuilder *builder = gtk_builder_new_from_resource("/cx/ring/RingGnome/ringgearsmenu.ui");
    GMenuModel *menu = G_MENU_MODEL(gtk_builder_get_object(builder, "menu"));
    gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(priv->ring_menu), menu);
    g_object_unref(builder);

    /* settings icon */
    gtk_image_set_from_icon_name(GTK_IMAGE(priv->image_settings), "emblem-system-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR);

    /* connect settings button signal */
    g_signal_connect(priv->ring_settings, "clicked", G_CALLBACK(settings_clicked), win);

    /* add the call view to the main stack */
    gtk_stack_add_named(GTK_STACK(priv->stack_main_view),
                        priv->vbox_call_view,
                        CALL_VIEW_NAME);

    if (has_ring_account()) {
        /* user has ring account, so show the call view right away */
        gtk_stack_set_visible_child(GTK_STACK(priv->stack_main_view), priv->vbox_call_view);
    } else {
        /* user has to create the ring account */
        show_account_creation(win);
    }

    /* init the settings views */
    priv->account_settings_view = account_view_new();
    gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->account_settings_view, ACCOUNT_SETTINGS_VIEW_NAME);

    priv->media_settings_view = media_settings_view_new();
    gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->media_settings_view, MEDIA_SETTINGS_VIEW_NAME);

    priv->general_settings_view = general_settings_view_new();
    gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->general_settings_view, GENERAL_SETTINGS_VIEW_NAME);

    /* make the setting we will show first the active one */
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->radiobutton_general_settings), TRUE);
    priv->last_settings_view = priv->general_settings_view;

    /* connect the settings button signals to switch settings views */
    g_signal_connect(priv->radiobutton_media_settings, "toggled", G_CALLBACK(show_media_settings), win);
    g_signal_connect(priv->radiobutton_account_settings, "toggled", G_CALLBACK(show_account_settings), win);
    g_signal_connect(priv->radiobutton_general_settings, "toggled", G_CALLBACK(show_general_settings), win);

    /* populate the notebook */
    auto smart_view = recent_contacts_view_new();
    gtk_container_add(GTK_CONTAINER(priv->scrolled_window_smartview), smart_view);

    auto contacts_view = contacts_view_new();
    gtk_container_add(GTK_CONTAINER(priv->scrolled_window_contacts), contacts_view);

    auto history_view = history_view_new();
    gtk_container_add(GTK_CONTAINER(priv->scrolled_window_history), history_view);

    /* welcome/default view */
    priv->welcome_view = ring_welcome_view_new();
    g_object_ref(priv->welcome_view);
    // gtk_stack_add_named(GTK_STACK(priv->stack_call_view), welcome_view, DEFAULT_VIEW_NAME);
    gtk_container_add(GTK_CONTAINER(priv->frame_call), priv->welcome_view);
    gtk_widget_show(priv->welcome_view);

    /* call/chat selection */
    QObject::connect(
       RecentModel::instance().selectionModel(),
       &QItemSelectionModel::currentChanged,
       [win](const QModelIndex current, G_GNUC_UNUSED const QModelIndex & previous) {
            if (auto call = RecentModel::instance().getActiveCall(current)) {
                /* if the call is on hold, we want to put it off hold automatically
                 * when switching to it */
                if (call->state() == Call::State::HOLD)
                    call << Call::Action::HOLD;
            }
            selection_changed(current, win);
        }
    );

    /* connect to dataChanged of the RecentModel to see if we need to change the view */
    QObject::connect(
        &RecentModel::instance(),
        &RecentModel::dataChanged,
        [win](const QModelIndex & topLeft, G_GNUC_UNUSED const QModelIndex & bottomRight, G_GNUC_UNUSED const QVector<int> & roles) {
            /* it is possible for dataChanged to be emitted inside of a dataChanged handler or
             * some other signal; since the connection is via a lambda, Qt would cause the
             * handler to be called directly. This is not behaviour we usually want, so we call our
             * function via g_idle so that it gets called after the initial handler is done.
             */
            if (topLeft == RecentModel::instance().selectionModel()->currentIndex())
                g_idle_add((GSourceFunc)selected_item_changed, win);
        }
    );

    g_signal_connect(priv->button_placecall, "clicked", G_CALLBACK(search_entry_placecall), win);
    g_signal_connect(priv->search_entry, "activate", G_CALLBACK(search_entry_placecall), win);

    /* autocompletion */
    priv->q_completion_model = new NumberCompletionModel();

    /* autocompletion renderers */
    GtkCellArea *completion_area = gtk_cell_area_box_new();

    /* photo renderer */
    GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new();
    gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area),
                                 renderer,
                                 TRUE,  /* expand */
                                 TRUE,  /* align */
                                 TRUE); /* fixed size */

    gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area),
                                       renderer,
                                       (GtkCellLayoutDataFunc)autocompletion_photo_render,
                                       NULL, NULL);

    /* name renderer */
    renderer = gtk_cell_renderer_text_new();
    g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
    gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area),
                                 renderer,
                                 TRUE,  /* expand */
                                 TRUE,  /* align */
                                 TRUE); /* fixed size */

    gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area),
                                       renderer,
                                       (GtkCellLayoutDataFunc)autocompletion_name_render,
                                       NULL, NULL);

    /* number renderer */
    renderer = gtk_cell_renderer_text_new();
    g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
    gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area),
                                 renderer,
                                 TRUE,  /* expand */
                                 TRUE,  /* align */
                                 TRUE); /* fixed size */

    gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area),
                                       renderer,
                                       (GtkCellLayoutDataFunc)autocompletion_number_render,
                                       NULL, NULL);
    /* account renderer */
    renderer = gtk_cell_renderer_text_new();
    g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
    gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area),
                                 renderer,
                                 TRUE,  /* expand */
                                 TRUE,  /* align */
                                 TRUE); /* fixed size */

    gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area),
                                       renderer,
                                       (GtkCellLayoutDataFunc)autocompletion_account_render,
                                       NULL, NULL);

    GtkEntryCompletion *entry_completion = gtk_entry_completion_new_with_area(completion_area);

    GtkQTreeModel *completion_model = gtk_q_tree_model_new(
        (QAbstractItemModel *)priv->q_completion_model,
        1,
        Qt::DisplayRole, G_TYPE_STRING);

    gtk_entry_completion_set_model(entry_completion, GTK_TREE_MODEL(completion_model));

    gtk_entry_set_completion(GTK_ENTRY(priv->search_entry), entry_completion);
    gtk_entry_completion_set_match_func(
        entry_completion,
        (GtkEntryCompletionMatchFunc) completion_match_func,
        NULL,
        NULL);

    /* connect signal to when text is entered in the entry */
    g_signal_connect(priv->search_entry, "changed", G_CALLBACK(search_entry_text_changed), win);
    g_signal_connect(entry_completion, "match-selected", G_CALLBACK(select_autocompletion), win);

    /* connect to incoming call and focus */
    QObject::connect(
        &CallModel::instance(),
        &CallModel::incomingCall,
        [=](Call* call) {
            CallModel::instance().selectionModel()->setCurrentIndex(
                CallModel::instance().getIndex(call), QItemSelectionModel::ClearAndSelect);
        }
    );

    /* react to digit key press events */
    g_signal_connect(win, "key-press-event", G_CALLBACK(dtmf_pressed), NULL);

    /* set the search entry placeholder text */
    gtk_entry_set_placeholder_text(GTK_ENTRY(priv->search_entry),
                                   C_("Please try to make the translation 50 chars or less so that it fits into the layout", "Search contacts or enter number"));
}